个人博客主页:https://blog.csdn.net/2301_79293429?type=blog
专栏:https://blog.csdn.net/2301_79293429/category_12545690.html
题目描述
现代数学的著名证明之一是 Georg Cantor 证明了有理数是可枚举的。他是用下面这一张表来证明这一命题的:
我们以 Z 字形给上表的每一项编号。第一项是 1/11/1,然后是 1/21/2,2/12/1,3/13/1,2/22/2,…
输入格式
整数N(1≤N≤10^7)。
输出格式
表中的第 N 项。
输入输出样例
输入
7
输出
1/4
题目链接: 记录详情 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
题目分析:
将题目中的图像写为易观察的形式:
/* 1/1
1/2 2/1
3/1 2/2 1/3
设最上面一行为第1行,本题用i表示,
第i行的分子分母之和为i+1,除了第一行,偶数行的分子从1开始,奇数行从i开始
*/
AC代码:
int main()
{
int n;
scanf("%d", &n);
if (n == 1)
printf("1/1");
else
{
int i = 0, j = 1, sum = 0;
for (i = 1;; i++)
{
sum += j++;
if (sum >= n)
break;
}
sum -= i;/*前面几行的总个数*/
if (i % 2 == 1)/*奇数行*/
{
j = 0;
if (sum == n - 1)
printf("%d/%d", i, 1);
else
{
int h = i - (n - sum) + 1;/*分子*/
i = n - sum;/*分母*/
printf("%d/%d", h, i);
}
}
else
{
j = 0;
if (sum == n - 1)
printf("%d/%d", 1, i);
else
{
int h = i - (n - sum) + 1;/*分母*/
i = n - sum;/*分子*/
printf("%d/%d", i, h);
}
}
}
return 0;
}
祝大家题题AC啦,天天只想做个WA梦~