华师一附中OI组

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

20141025初级班训练题

[复制链接]

738

主题

1485

帖子

5422

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
5422
跳转到指定楼层
楼主
发表于 2014-10-25 14:10:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1、输入一个正整数,颠倒输出,比如输入1234 输出4321
2、筛法求质数
3、10000以内那个数的约数最多
4、数字图案
        0
     1    2
   3   4    5
6   7    8    9
回复

使用道具 举报

61

主题

147

帖子

563

积分

超级版主

Rank: 8Rank: 8

积分
563
推荐
发表于 2014-10-25 14:38:59 | 只看该作者
本帖最后由 diggersun 于 2014-10-25 14:49 编辑

感谢沧笙踏歌同学的题解,他(她)将正整数当做字符读进去,在一定程度上是可以的,标准的做法如下

  1. <P>#include<iostream>
  2. using namespace std;
  3. int i;
  4. int x,y;
  5. int main()
  6. {
  7.     cin>>x;
  8.     y=0;
  9.     while (x>0)
  10.     {
  11.         i=x%10;
  12.         x=x/10;
  13.         y=y*10+i;
  14.     }
  15.     cout<<y;</P>
  16. <P>return 0;
  17. }
  18. </P>
复制代码
回复 支持 1 反对 0

使用道具 举报

61

主题

147

帖子

563

积分

超级版主

Rank: 8Rank: 8

积分
563
推荐
发表于 2014-10-25 14:52:02 | 只看该作者
本帖最后由 diggersun 于 2014-10-25 14:58 编辑

假设求2..200之间的质数,筛法求质数的步骤是:
1、先将2-200之间的所有数字标记为质数
2、从2开始,若这个数是质数,则划掉他的倍数
3、直到200为止。
  1. #include<iostream>
  2. using namespace std;
  3. bool a[201];  //定义201个变量,分别是a[0],a[1].***a[200],前面的a[0],a[1]被浪费了。
  4. int i,j;
  5. int main()
  6. {
  7.     for (i=2; i<=200; i++) a[i]=true;   假设都是素数
  8.     i=2;  从2开始
  9.     while (i<=200)  小于200就做
  10.     {
  11.         if (a[i])    若是素数,则划掉他的倍数
  12.         {
  13.             j=i+i;   这里居然可以将i+i 变成i*i?????
  14.             while (j<=200)    倍数也应该在200以内
  15.             {
  16.                 a[j]=false;  // 将i的倍数刷掉
  17.                 j=j+i;   下一个
  18.             }
  19.         }
  20.         i++;
  21.     }
  22.     for (i=2; i<=200; i++) if (a[i]) cout <<i<<' ';
  23.     return 0;
  24. }
复制代码
回复 支持 1 反对 0

使用道具 举报

1

主题

13

帖子

62

积分

注册会员

Rank: 2

积分
62
地板
发表于 2014-10-25 14:16:27 | 只看该作者
筛法求质数
怎么这么眼熟呢?
回复 支持 反对

使用道具 举报

61

主题

147

帖子

563

积分

超级版主

Rank: 8Rank: 8

积分
563
5#
发表于 2014-10-25 15:02:52 | 只看该作者
比较猥琐的筛法,这样可以的正确结果但是时间效率不好,勉强应急用一下
  1. #include<iostream>
  2. #include<cstring>
  3. using namespace std;
  4. bool a[201];
  5. int i,j;

  6. int main()
  7. {
  8.     for (i=2; i<=200; i++) a[i]=true;
  9.     for (i=2;i<=200;i++)
  10.         for (j=2;j<=200/i;j++)
  11.            a[i*j]=false;
  12.     for (i=2; i<=200; i++) if (a[i]) cout <<i<<' ';
  13.     return 0;
  14. }
复制代码
回复 支持 反对

使用道具 举报

61

主题

147

帖子

563

积分

超级版主

Rank: 8Rank: 8

积分
563
6#
发表于 2014-10-25 15:08:36 | 只看该作者
第三题,比较直接的做法是 对于每一个数,用1到他本身的数去除,若能整数,约数个数加1,若约数个数大于以前的最大值,则更新
  1. #include<iostream>
  2. #include<cstring>
  3. using namespace std;
  4. int s,i,j,maxi,maxs;

  5. int main()
  6. {
  7.     for (i=2; i<=10000; i++)
  8.     {
  9.         s=0;
  10.         for (j=1; j<=i; j++) if (i%j==0) s++;
  11.         if (s>maxs)
  12.         {
  13.             maxs=s;
  14.             maxi=i;
  15.         }
  16.     }
  17.     cout<<maxi<<' '<<maxs;
  18.     return 0;
  19. }
复制代码
回复 支持 反对

使用道具 举报

61

主题

147

帖子

563

积分

超级版主

Rank: 8Rank: 8

积分
563
7#
发表于 2014-10-25 15:21:59 | 只看该作者
  1. #include<iostream>
  2. using namespace std;
  3. int s,i,j,l,k=1;;
  4. int main()
  5. {
  6.     i=0;while (i<=9)
  7.     {
  8.         cout<<' '<<i;
  9.         j++;
  10.         if (j==k) {cout<<endl;j=0;k++;}
  11.         i++;
  12.     }
  13.     return 0;
  14. }
复制代码
回复 支持 反对

使用道具 举报

1

主题

13

帖子

62

积分

注册会员

Rank: 2

积分
62
8#
发表于 2014-10-25 16:01:28 | 只看该作者
diggersun 发表于 2014-10-25 14:52
假设求2..200之间的质数,筛法求质数的步骤是:
1、先将2-200之间的所有数字标记为质数
2、从2开始,若这 ...

(。_。)之前打了一遍开个网站全没了,现在想不出解题方法的我换换脑子再来打一遍。
(。・`ω&acute;・) 首先以下这些都是我个人的看法,全都是一些无关紧要的意见,与C++的学习并无过密关联。
(σ‘・д・)σ 1、既然是以代码形式发帖,又为何有的注解打上了“//”而有的没有,看起来甚是不美;
              2、本帖中“素数”并非人类,不应用代词“他”称呼,而应改为“它”,(但由于Mr.Sun现打现发时间需要尽量压缩,这一点可以理解。)
              3、下方一帖中“时间效率不好”应更正为“时间效率不高”,因为效率只能用高而非好来形容;
              4、为何Mr.Sun您用词不是“恶心”就是“猥琐”,这用词不忍直视(/ˍ・、);
              5、每次看见Mr.Sun打字我就有一种难以言表的痛心疾首,心疼他打半天都是错的(′へ`、 );
以上。(・(ェ)・)
如有异议大家可以跟帖。

回复 支持 反对

使用道具 举报

4

主题

68

帖子

1607

积分

版主

Rank: 7Rank: 7Rank: 7

积分
1607
9#
发表于 2014-10-25 19:43:23 | 只看该作者
clivia 发表于 2014-10-25 16:01
(。_。)之前打了一遍开个网站全没了,现在想不出解题方法的我换换脑子再来打一遍。
(。・`ω ...

呵呵……无异议……跟帖……
这个人很懒,不想写签名。
回复 支持 反对

使用道具 举报

4

主题

68

帖子

1607

积分

版主

Rank: 7Rank: 7Rank: 7

积分
1607
10#
发表于 2014-10-25 19:45:02 | 只看该作者
五小时前还在上课,没时间刷题呀。
这个人很懒,不想写签名。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-25 14:18 , Processed in 0.322056 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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