现代数学的著名证明之一是 Georg Cantor 证明了有理数是可枚举的。他是用下面这一张表来证明这一命题的:
1/1?,1/2?,1/3?,1/4,1/5, …
2/1,2/2?,2/3,2/4, …
3/1?,3/2,3/3, …
4/1,4/2, …
5/1, …
…
我们以 Z 字形给上表的每一项编号。第一项是?1/1,然后是?1/2,2/1,3/1,2/2,…
输入格式
整数N(1≤N≤10^7)。
输出格式
表中的第?N?项。
例:
7
1/4??
暴力法
#include<stdio.h>
int main()
{
int up=1,down=1;//up分子,down分母
int num;
int flag=1;//计数器
int temp;//中介变量
scanf("%d",&num);
while(flag!=num)
{
if(up==1&&down%2!=0&&flag!=num)
{
flag++;
down++;
}
if(down==1&&up%2==0&&flag!=num)
{
flag++;
up++;
}
if(down%2==0)
{
temp=up;
while(temp!=down&&flag!=num)
{
down--;
up++;
flag++;
}
}
if(up%2!=0)
{
temp=down;
while(temp!=up&&flag!=num)
{
down++;
up--;
flag++;
}
}
}
printf("%d/%d",up,down);
return 0;
}
技术法
#include<stdio.h>
int main()
{
int n,k=1;
scanf("%d",&n);
while (n>k)
{
n=n-k;
k++;
}
if(k%2==0)
printf("%d/%d",n,k+1-n);
else
printf("%d/%d",k+1-n,n);
return 0;
}
?
|