题目描述
现代数学的著名证明之一是 Georg Cantor 证明了有理数是可枚举的。他是用下面这一张表来证明这一命题的:
我们以 Z 字形给上表的每一项编号。第一项是 1 / 1 1/1 1/1,然后是 1 / 2 1/2 1/2, 2 / 1 2/1 2/1, 3 / 1 3/1 3/1, 2 / 2 2/2 2/2,…
输入格式
整数 N N N( 1 ≤ N ≤ 1 0 7 1 \leq N \leq 10^7 1≤N≤107)。
输出格式
表中的第 N N N 项。
样例 #1
样例输入 #1
7
样例输出 #1
1/4
代码
先把前面的一堆三角形一起模拟了,再来看后面零碎的几个位置:
int main()
{long long n;cin >> n;long long sum = 0;long long i = 1;while (sum + i < n){sum += i;// cout<< sum << endl;i++;}// cout << sum << endl;// cout << i-1 << endl;long long res = n - sum;long long x , y ;if ((i-1) % 2 == 1) // 奇数{x = 1;y = i-1;// cout << x << " " << y << endl;y += 1; // 从右上角开始for (int j = 1; j < res; j++){x++;y--;}}else // 偶数{x = i - 1; y = 1;// cout << x << " " << y << endl;x += 1;for (int j = 1; j < res; j++){x--;y++;}}cout << x << "/" << y << endl;
}