小 (增加信息题) |
小 (date) |
||
(未显示1个用户的3个中间版本) | |||
第1行: | 第1行: | ||
[[分类:模拟与排序]] | [[分类:模拟与排序]] | ||
==摘要== | ==摘要== | ||
− | {{信息题|Cantor表|http://www. | + | {{信息题|Cantor表|http://www.codevs.cn/problem/1083/|1|100|不等号取等问题|80|time=2014/08/16 18:32:34}} |
==题意== | ==题意== | ||
输出Cantor表中的第N项。 | 输出Cantor表中的第N项。 |
题目链接 | 难度等级 | 完成状态 | 完成分数 | 最后编辑时间 | 失误原因(初次提交分数) |
---|---|---|---|---|---|
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; } |