算法學習-題目-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;
}