noip1999 Cantor表
题目描述现代数学的著名证明之一是Georg Cantor证明了有理数是可枚举的。他是用下面这一张表来证明这一命题的:
我们以Z字形给上表的每一项编号。第一项是1/1,然后是1/2,2/1,3/1,2/2,…
输入
整数N(1≤N≤10000000)
输出
表中的第N项
样例输入
7
样例输出
1/4
求源代码和注释
本帖最后由 rencaixiaomeng 于 2018-12-9 00:09 编辑
#include <stdio.h>
#include <math.h>
int main(void)
{
int n, i, j, k;
scanf("%d", &n);
k = (int)(sqrt((double)n * 2)) + 10;
for (;k >= 1;k--)if (k*(k + 1)<n * 2)break;
j = n - k*(k + 1) / 2;
if (k & 1)printf("%d/%d\n", j, k + 2 - j);
else printf("%d/%d\n", k + 2 - j, j);
return 0;
} 题目是哪里来的
页:
[1]