您的位置:首页 > 其它

《算法竞赛入门经典》5.41数学基础-Cantor的数表

2016-03-28 20:21 274 查看
如下数列,第一项是1/1,第二项是1/2,第三项是2/1,第四项是3/1,第五项是2/2,……。输入n,输出第n项。
1/1 1/2 1/3 1/4 1/5
2/1 2/2 2/3 2/4
3/1 3/2 3/3
4/1 4/2
5/1
样例输入:
3
14
7
12345
样例输出:
2/1
2/4
1/4
59/99

方法一:

#include <stdio.h>
int main()
{
int n;
while (scanf("%d", &n) == 1)
{
int k = 1;
while (k < n)    //k为第n项所在行数,循环的意义为所求数在第k条斜线第n项
{
n -= k;        //n减去第k条斜线上的数
k++;
}
if (k%2 == 1)    printf("%d/%d\n", k+1-n, n); //表示输出第k斜线倒数第(k-n)+1项
else            printf("%d/%d\n", n, k+1-n); //表示输出第k斜线正数第n项
}
return 0;
}


View Code
分析:

  用n减去前k条斜线上的个数后再和第k条斜线上个数相比即得所求数位置。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: