华师一附中OI组

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1776|回复: 4
打印 上一主题 下一主题

Cantor数

[复制链接]

738

主题

1485

帖子

5420

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
5420
跳转到指定楼层
楼主
发表于 2018-4-21 20:07:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
现代数学的著名证明之一是Georg Cantor证明了有理数是可枚举的。他是用下面这一张表来证明这一命题的: 第一项是1/1,第二项是是1/2,第三项是2/1,第四项是3/1,第五项是2/2,……。输入n,输出第n项。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

9

主题

158

帖子

470

积分

华一学生

积分
470
QQ
沙发
发表于 2018-4-21 20:28:05 | 只看该作者
  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. }
复制代码
回复 支持 反对

使用道具 举报

9

主题

89

帖子

292

积分

华一学生

积分
292
板凳
发表于 2018-4-22 21:00:12 | 只看该作者
  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. }
复制代码
回复 支持 反对

使用道具 举报

0

主题

30

帖子

91

积分

注册会员

Rank: 2

积分
91
地板
发表于 2018-7-31 09:34:12 | 只看该作者
  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. }
复制代码
回复 支持 反对

使用道具 举报

0

主题

31

帖子

94

积分

注册会员

Rank: 2

积分
94
5#
发表于 2018-7-31 10:26:04 | 只看该作者
  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. }
复制代码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|服务支持:DZ动力|华师一附中OI组  

GMT+8, 2024-11-2 04:41 , Processed in 0.141934 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表