1083 Cantor表

题目描述 Description

现代数学的著名证明之一是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/1,然后是1/2,2/1,3/1,2/2,…


1083 Cantor表_第1张图片

输入描述 Input Description

整数N(1≤N≤10000000)

输出描述 Output Description

表中的第N项

样例输入 Sample Input

7

样例输出 Sample Output

1/4

代码

#include
int main()
{
  int i=0,n,tag=0,a=2,b=0;
  scanf("%d",&n);
  while(i!=n){
    if(tag){
      while(b!=1){
        a++;
        b--;
        i++;
        if(i==n)
          goto out;
      }
      a++;
      i++;
      tag=0;
    }
    else{
      while(a!=1){
        a--;
        b++;
        i++;
        if(i==n)
          goto out;
      }
      b++;
      i++;
      tag=1;
    }
  }
  out:
  printf("%d/%d",a,b);
  return 0;
}

你可能感兴趣的:(1083 Cantor表)