算法学习-题目-00-洛谷-P1014 Cantor表-2020-5-17
一、题目
题目描述
现代数学的著名证明之一是 Georg Cantor 证明了有理数是可枚举的。他是用下面这一张表来证明这一命题的:
1/11/1 , 1/21/2 , 1/31/3 , 1/41/4, 1/51/5, …
2/12/1, 2/22/2 , 2/32/3, 2/42/4, …
3/13/1 , 3/23/2, 3/33/3, …
4/14/1, 4/24/2, …
5/15/1, …
…
我们以 Z 字形给上表的每一项编号。第一项是 1/11/1,然后是 1/21/2,2/12/1,3/13/1,2/22/2,…
输入格式
整数N(1≤N≤107)。
输出格式
表中的第 N 项。
输入输出样例
输入
7
输出
1/4
二、题目分析
1/1 | 1/2 | 2/1 | 3/1 | 2/2 | 1/3 | 1/4 | 2/3 | 3/2 | 4/1 | 5/1 | 4/2 | 3/3 | 2/4 | 1/5 | 1/6 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
1/1 -> 1/2 下加
1/2->2/1 上加下减
2/1->3/1 上加
3/1->2/2 上减下加
2/2->1/3 上减下加
1/3->1/4 下加
1/4->2/3 上加下减
2/3->3/2 上加下减
3/2->4/1 上加下减
4/1->5/1 上加
5/1->4/2 上减下加
4/2->3/3 上减下加
3/3->2/4 上减下加
2/4->1/5上减下加
1/5->1/6 下加
…
规律
1.分子为1,分母加1,只操作1次,不连续操作(即1/1->1/2,但1/2不会变成1/3)
2.分母为1,分子加1,只操作1次,不连续操作(即2/1->3/1,但3/1不会变成4/1)
3.完成1后到2过程,中都是上加下减(1,2过程只1,2规律,上加下减是分子加1,分母减一)
4完成2后到1过程,中都是上减下加(1,2过程只1,2规律,上减下加是分母加1,分子减一)
三、代码
#include<iostream>
/*
1.输入
2.处理
3.输出
*/
using namespace std;
int main() {
int a,b,c,d,n;
b=1;
c=1;
d=0;//0表示上为1,1表示下为1
n=0;//状态看是否第一次操作
/*1*/
cin >>a;
/*2*/
for(int i=1;i<a;i++)
{
if(b==1&&n==0){c++;d=0;n=1;continue;}
if(c==1&&n==0){b++;d=1;n=1;continue;}
if(d==0){b+=1;c-=1;n=0;continue;}
if(d==1){b-=1;c+=1;n=0;continue;}
}
/*3*/
cout<<b<<"/"<<c;
return 0;
}