题目描述 Description
现代数学的著名证明之一是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,…
输入描述 Input Description
整数N(1≤N≤10000000)
输出描述 Output Description
表中的第N项
样例输入 Sample Input
7
样例输出 Sample Output
1/4
我做这个题是找的规律:
如:
1/1
1项为一组 奇数
1/2 2/1
2项为一组
偶数
3/1 2/2 1/3
3项为一组
奇数
1/4
2/3 3/2
4/1
4项为一组
偶数
5/1 4/2 3/3 2/4 1/5
5项为一组
奇数
‘..................
...........
(奇数组的前面大数字在分子,小数字在分母)
第七项在第4组里面 7 < 1 + 2 + 3 + 4 = 10
由上规律
c++代码:
#include <iostream>
using namespace std;
int main()
{
int n;
cin >> n;
int count1 = 0, count2 = 1, num, sum = 0; //count1为分子count2分母
while (sum < n)
{
sum += ++count1;
}<span style="font-family: Arial, Helvetica, sans-serif;"> </span><span style="font-family: Arial, Helvetica, sans-serif;">//此时count1为组数</span>
int D = n - (sum - count1);<span style="white-space:pre"> </span>// D为第n组的第D项
int temp = count1;
for (int i = 1; i < D; i++)
{
count1--;
count2++;
}
if (temp % 2 == 0)
{
<span style="white-space:pre"> </span>cout << count2 << "/" << count1 << endl; //颠倒分子和分母
}
else
{
cout << count1 << "/" << count2 << endl; //正常输出
}
return 0;
}
ps:如有错误,欢迎指出