(替换文字 - 「codevs.com」替换为「codevs.cn」)
(date)
 
第1行: 第1行:
 
[[分类:模拟与排序]]
 
[[分类:模拟与排序]]
 
==摘要==
 
==摘要==
{{信息题|Cantor表|http://www.codevs.cn/problem/1083/|1|100|不等号取等问题|80}}
+
{{信息题|Cantor表|http://www.codevs.cn/problem/1083/|1|100|不等号取等问题|80|time=2014/08/16 18:32:34}}
 
==题意==
 
==题意==
 
输出Cantor表中的第N项。
 
输出Cantor表中的第N项。

2014年10月2日 (四) 23:49的最后版本

摘要

题目链接 难度等级 完成状态 完成分数 最后编辑时间 失误原因(初次提交分数)
Cantor表 ★☆☆☆☆ 答案正确 100 2014/08/16 18:32:34 不等号取等问题(80)

题意

输出Cantor表中的第N项。

题解

好像经常在数学填空压轴遇到这种题。找规律呀。 很显然从左上到右下,第i斜行有i个数,然后容易得到第N个数在第line斜行,前(line-1)斜行共有sum个数,还剩下多少个数(require)。

for(line=0;sum<n;sum+=++line);
sum-=line;
require=n-sum;

观察容易得到i为奇数的时候从n/1开始,为偶数的时候从1/n开始。分奇偶讨论容易得到最后的分数形式。

错误分析

第一次写的时候第5行写作了sum<=n,导致恰好行末的时候会出现p/0的情况,WA80分。

代码

1083.cpp代码已折叠
展开折叠内容
#include<cstdio>
int main(){
  int n,line=0,sum=0,require;
  scanf("%d",&n);
  for(;sum<n;sum+=++line);
  sum-=line;
  require=n-sum;
  if(line%2)
    printf("%d/%d",line-require+1,require);
  else 
    printf("%d/%d",require,line-require+1);
  return 0;
}

链接

著作权声明[编辑]

关于[编辑]