题目如下
题目描述现代数学的著名证明之一是 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/11/1,然后是 1/21/2,2/12/1,3/13/1,2/22/2,…
输入格式整数N (1 <= N <= 10^7)
输出格式表中的第 NN 项。
输入输出样例输入: 7 输出:1/4
思路:掌握规律
AC代码如下:
#includeusing namespace std; int main(){ int N; // N 为表中的第N项 int a = 0; // a 为第N项所在的层数 int b = 0; // b 为第一层到第a层所有的数的个数 int d; // d 为第N项离补满第a层差多少 cin >> N; for (int i = 1;i < 10000000;i++){ b = b + i; a = a + 1; if(b <= N){ if(b == N){ d = 0; break; } } if(b > N){ d = b - N; break; } } if(a%2 == 0){ cout << (a-d) << "/" << (d+1) << endl; }else{ cout << (d+1) << "/" << (a-d) << endl; } return 0; }


![用C++写洛谷P1014 [NOIP1999 普及组] Cantor 表 用C++写洛谷P1014 [NOIP1999 普及组] Cantor 表](http://www.mshxw.com/aiimages/31/429540.png)
