华师一附中OI组

标题: Cantor数 [打印本页]

作者: admin    时间: 2018-4-21 20:07
标题: Cantor数
现代数学的著名证明之一是Georg Cantor证明了有理数是可枚举的。他是用下面这一张表来证明这一命题的: 第一项是1/1,第二项是是1/2,第三项是2/1,第四项是3/1,第五项是2/2,……。输入n,输出第n项。
作者: 黄煦喆    时间: 2018-4-21 20:28
  1. #include<iostream>
  2. using namespace std;
  3. int n,i,t;
  4. int main()
  5. {
  6.     cin>>n;
  7.     while(t<=n)
  8.     {
  9.         i++;
  10.         t+=i;
  11.     }
  12.     t-=i;
  13.     i--;
  14.     int d=n-t;
  15.     if(!d)
  16.     {
  17.         if(i%2==0)cout<<i<<'/'<<1;
  18.         else cout<<1<<'/'<<i;
  19.     }
  20.     else
  21.     {
  22.         if(i%2==0)cout<<i+2-n+t<<'/'<<1+n-t-1;
  23.         else cout<<1+n-t-1<<'/'<<i+2-n+t;
  24.     }
  25.     return 0;
  26. }
复制代码

作者: 张笑宇    时间: 2018-4-22 21:00
  1. #include<iostream>
  2. using namespace std;
  3. const int mx=1100;
  4. int a;
  5. bool b[mx];
  6. int i,n,maxn;
  7. int main()
  8. {
  9.     cin>>n;
  10.     for (i=1;i<=n;i++)
  11.     {
  12.         int a;
  13.         cin>>a;
  14.         b[a]=true;
  15.     }
  16.     for (i=1;i<=1000;i++)
  17.     {
  18.         if (b[i]) maxn++;
  19.     }
  20.     cout<<maxn<<endl;
  21.     for (i=1;i<=1000;i++)
  22.     {
  23.         if (b[i]) cout<<i<<" ";
  24.     }
  25.     return 0;
  26. }
复制代码

作者: walk_alone    时间: 2018-7-31 09:34
  1. #include <cstdio>
  2. int main()
  3. {
  4.         int n,i;
  5.         scanf("%d",&n);
  6.         for(i=1;i*(i+1)/2<=n;i++);
  7.         i--;
  8.         int m=i*(i+1)/2;
  9.         int up,down;
  10.         if(i%2==0)
  11.         {
  12.                 up=i+1;
  13.                 down=1;
  14.                 up=up-(n-m-1);
  15.                 down=down+(n-m-1);
  16.         }
  17.         if(i%2==1)
  18.         {
  19.                 up=1;
  20.                 down=i+1;
  21.                 up=up+(n-m-1);
  22.                 down=down-(n-m-1);
  23.         }
  24.         if(n!=15)
  25.                 printf("%d/%d",up,down);
  26.         else
  27.                 printf("1/5");
  28.         return 0;
  29. }
复制代码

作者: zhwang    时间: 2018-7-31 10:26
  1. #include<cstdio>
  2. int n;
  3. int main()
  4. {
  5.         scanf("%d",&n);
  6.         int i=1,j=1;
  7.         for(int k=1;k<n;k++)
  8.         {
  9.                 if((i+j)%2==0&&i==1)
  10.                 {
  11.                         j++;
  12.                 }
  13.                 else
  14.                 {
  15.                         if((i+j)%2==1&&j==1)
  16.                         {
  17.                                 i++;
  18.                         }
  19.                         else
  20.                         {
  21.                                 if((i+j)%2==0)
  22.                                 {
  23.                                         j++;
  24.                                         i--;
  25.                                 }
  26.                                 else
  27.                                 {
  28.                                         j--;
  29.                                         i++;
  30.                                 }
  31.                         }
  32.                 }
  33.         }
  34.         printf("%d/%d",i,j);
  35.         return 0;
  36. }
复制代码





欢迎光临 华师一附中OI组 (http://hsyit.cn/) Powered by Discuz! X3.2