http://noi.openjudge.cn/ch0201/8760/
描述
现代数学的著名证明之一是Georg Cantor证明了有理数是可枚举的。他是用下面这一张表来证明这一命题的:
我们以Z字形给上表的每一项编号。第一项是1/1,然后是1/2,2/1,3/1,2/2,…
给定N,求第N项。
输入
一个整数N(1≤N≤10000000)。
输出
一个分数,即表中的第N项。
样例输入
7
样例输出
1/4
代码1
#include <iostream>
using namespace std;
int main()
{
int n;
cin>>n;
int k,f;
int i,j;
i=1;
j=1;
f=1;
for (k=1; k<=n; k++)
{
if (k==n)
cout<<i<<"/"<<j<<endl;
switch (f)
{
case 1:
j++;
f=2;
break;
case 2:
i++;
j--;
if(j==1)
f=3;
break;
case 3:
i++;
f=4;
break;
case 4:
i--;
j++;
if (i==1)
f=1;
break;
}
}
return 0;
}
代码 2
#include<bits/stdc++.h>
using namespace std;
int main()
{
int i,n;
cin>>n;
for(i=1; ; i++)
{
if(n<=i)
break;
n-=i;
}
if(i%2==0)
cout<<n<<"/"<<i+1-n;
else
cout<<i+1-n<<"/"<<n;
return 0;
}