ten$1 发表于 2018-12-8 22:30:01

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-8 23:35:28

本帖最后由 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;
}

rencaixiaomeng 发表于 2018-12-8 23:40:05

题目是哪里来的
页: [1]
查看完整版本: noip1999 Cantor表