题目描述
现代数学的著名证明之一是Georg Cantor证明了有理数是可枚举的。他是用下面这一张表来证明这一命题的:
我们以Z字形给上表的每一项编号。第一项是1/1,然后是1/2,2/1,3/1,2/2,…
输入描述:
整数N(1≤N≤10000000)
输出描述:
表中的第N项
示例1
输出
复制1/4
#include<iostream> #include<algorithm> using namespace std; int main() { int n; cin>>n; int x=1,y=1; int flag=0; while(1) { if(x==1) { y++; n--; if(n==1) break; while(y>1) { y--; x++; n--; if(n==1) { flag = 1; break; } } if(flag == 1) break; } else if(y==1) { x++; n--; if(n==1) break; while(x>1) { x--; y++; n--; if(n==1) { flag = 1; break; } } if(flag==1) break; } } cout<<x<<"/"<<y; }
总结:
纯模拟,没技巧,判断点为行为1或列为1