P1014 [NOIP1999 普及组] Cantor 表
作者:互联网
https://www.luogu.com.cn/problem/P1014
思路
首先理解题目主意:输入n,代表第几项,输出那一项的值
既然以Z字形编号,那我把每行按Z字形写开
第一行: 1/1
第二行: 1/2 2/1
第三行: 3/1 2/2 1/3
第四行: 1/4 2/3 3/2 4/1
根据列举,可以发现一些规律。
每行个数随着行数增加。
分子+分母 = 行数 + 1
偶数行 分子 1 —2 分母 2 - 1
奇数行 分子 2 —1 分母 1 - 3
解题思路
求n是什么值,首先要确定他在哪一行,然后在确定是奇数行还是偶数行,根据减完后的第几个,知道其中一个分子分母的值,
在根据行数-1,可求出另一个。
补充:
确定哪一行:n 减去每行增加的个数,剩余的就是那行所在的第几个(因为n也是每行增加来的)
举例n = 7 n - 1 = 6 n - 2 = 4 n - 3 = 1 那层数就是4 那行的分子就是1的值
总结:
这种题不需要再程序中把数据建好,要根据已给的数据找到规律, 在程序中表现出来。
#include<stdio.h>
int main()
{
int n,h = 1;//h表示在第几行
scanf("%d",&n);
while(n>h) //找出在哪行
{
n = n-h;
h++;
}
// printf("n = %d,h = %d\n",n,h);
if(h % 2 == 0) //判断奇偶行
{
printf("%d/%d",n,h+1-n);
}
if(h % 2 == 1)
{
printf("%d/%d",h+1-n,n);
}
return 0;
}
标签:分子,每行,第几个,P1014,Cantor,NOIP1999,printf,分母 来源: https://blog.csdn.net/qq_44740753/article/details/120952172