原题地址:P1014 Cantor表 - 洛谷
其实看见这道题我第一反应是被吓到了。。。。我起初看到每一行这么有规律,但却要按照Z形输出就在想他会不会每一排都按规律输出好,再来找Z形输出的规律,然后按顺序输出。。。
但很快我按照Z形输出的数字写了一部分出来,很快就发现了规律,才发现这是个水题。。。
第一行:1/1
第二行:1/2、2/1
第三行:3/1、2/2、1/3
第四行:1/4、2/3、3/2、4/1
写完后我发现有个很关键的数字,一个是这个数字是这行顺数的第几个、一个是这行倒数的第几个;
然后根据他是单数行还是双数行,来确定分子是顺数还是分母是顺数。
于是乎,这道水题就这么解决了!
AC代码:
#include <stdio.h>
int main()
{
int i, j, n, m;
scanf("%d", &i);
for(j = 0; (1 + j) * j / 2.0 < i; j++);
n = j - 1;
n = (1 + n) * n / 2.0;
m = (1 + j) * j / 2.0;
m = m - i + 1;
n = i - n;
if(j % 2 == 0)
printf("%d/%d", n, m);
else
printf("%d/%d", m, n);
return 0;
}