华师一附中OI组

标题: 20141021初级班训练题 [打印本页]

作者: admin    时间: 2014-10-20 10:58
标题: 20141021初级班训练题
1、分解质因数:输入一个正整数,将它分解质因数,比如 90=2*3*3*5;
2、输入十个数字,求其中最大的那个数字;
3、1!+2!+3!+...+20!的值;
4、s=1+2+4+7+11+**+N,其中N是不大于100的最大整数,求S。
5、求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字,最后一个数字长度为k。例如2+22+222+2222+22222(此时共有5个数相加),输入a,k,求S
作者: hr567    时间: 2014-10-20 21:35
沙发……
讲义上的题目。
作者: hr567    时间: 2014-10-20 21:47
标题: 第一题来了!
本帖最后由 hr567 于 2014-10-20 22:49 编辑
  1. #include<iostream>
  2. using namespace std;
  3. int main()
  4. {
  5.     int i, j = 2;
  6.     cin >> i;
  7.     cout << i << '=';
  8.     while(i % j != 0)
  9.         ++j;
  10.     cout << j;
  11.     i /= j;
  12.     while(i != 1)
  13.     {
  14.         if(i % j == 0)
  15.         {
  16.             i /= j;
  17.             cout << '*' << j;
  18.         }
  19.         else
  20.             ++j;
  21.     }
  22.     return 0;
  23. }
复制代码

作者: hr567    时间: 2014-10-20 21:52
标题: 第二题
本帖最后由 hr567 于 2014-10-20 22:49 编辑
  1. #include<iostream>
  2. using namespace std;
  3. int main()
  4. {
  5.     int i, j, k;
  6.     cin >> j; k = j;
  7.     for(i = 1; i < 10; ++i)
  8.     {
  9.         cin >> j;
  10.         if(j > k)k = j;
  11.     }
  12.     cout << k;
  13.     return 0;
  14. }
复制代码



作者: hr567    时间: 2014-10-20 22:27
标题: 第三题
本帖最后由 hr567 于 2014-10-22 20:59 编辑
  1. #include<iostream>
  2. using namespace std;
  3. int main()
  4. {
  5.     int i, j = 1, s = 0;
  6.     for(i = 1; i <= 20; ++i)
  7.     {
  8.         j *= i;
  9.         s += j;
  10.     }
  11.     cout << s;
  12.     return 0;
  13. }
复制代码


作者: hr567    时间: 2014-10-20 22:35
标题: 第四题
本帖最后由 hr567 于 2014-10-22 20:59 编辑
  1. #include<iostream>
  2. using namespace std;
  3. int main()
  4. {
  5.     int i, n, j = 1, s = 1;
  6.     cin >> n;
  7.     for(i = 0; j != n; ++i)
  8.     {
  9.         j += i;
  10.         s += j;
  11.     }
  12.     cout << s;
  13.     return 0;
  14. }
复制代码

作者: hr567    时间: 2014-10-20 22:45
标题: 第五题
本帖最后由 hr567 于 2014-10-20 22:52 编辑
  1. using namespace std;
  2. int main()
  3. {
  4.     int s = 0, i, k, a;
  5.     cin >> a >> k;
  6.     i = a;
  7.     while(k)
  8.     {
  9.         s += a;
  10.         a = a*10+i;
  11.         --k;
  12.     }
  13.     cout << s;
  14.     return 0;
  15. }
复制代码

作者: admin    时间: 2014-10-21 16:49
楼上真是个牛人呀!还是在初中生就这么牛了!
不过,不建议写这些东西 i/=j;++j;
为了程序的清晰,初学者还是老老实实的i=i/j; j++

作者: diggersun    时间: 2014-10-21 18:46
第一题:
  1. #include<iostream>
  2. using namespace std;
  3. int x,i;
  4. int main()
  5. {
  6.     cin>>x;cout<<x<<'=';
  7.     i=2;while (x%i!=0) i++;x=x/i;cout<<i;
  8.     while (x>1)
  9.     {
  10.         if (x%i==0) {x=x/i;cout<<'*'<<i;}
  11.         else i++;
  12.     }
  13.     return 0;
  14. }
复制代码

作者: diggersun    时间: 2014-10-21 18:50
第二题No1
  1. #include<iostream>
  2. using namespace std;
  3. int x,i,maxx;
  4. int main()
  5. {
  6.     cin>>x;maxx=x;
  7.     for (i=2;i<=10;i++)
  8.     {
  9.         cin>>x;
  10.         if (x>maxx) maxx=x;
  11.     }
  12.     cout<<maxx;
  13.     return 0;
  14. }
复制代码

  1. #include<iostream>
  2. using namespace std;
  3. int x,i,maxx;
  4. int main()
  5. {
  6.     maxx=-9999999;
  7.     for (i=1;i<=10;i++)
  8.     {
  9.         cin>>x;
  10.         if (x>maxx) maxx=x;
  11.     }
  12.     cout<<maxx;
  13.     return 0;
  14. }
复制代码

作者: diggersun    时间: 2014-10-21 18:54
改进第二题  求次大值
  1. #include<iostream>
  2. using namespace std;
  3. int x1,x2,i,max1,max2;
  4. int main()
  5. {
  6.     cin>>x1>>x2;
  7.     if (x1>x2){max1=x1;max2=x2;}
  8.     else {max1=x2;max2=x1;}
  9.     for (i=3;i<=10;i++)
  10.     {
  11.         cin>>x1;
  12.         if (x1>max1) {max2=max1;max1=x1;}
  13.         else if (x1>max2) {max2=x1;}
  14.     }
  15.     cout<<max2;
  16.     return 0;
  17. }
复制代码

作者: diggersun    时间: 2014-10-21 18:59
第三题 完美做法,千万不要蠢到用两重循环,BTW 楼上的初中生,你的C++是不是那个巨牛的Diggersun老师教的?
  1. #include<iostream>
  2. using namespace std;
  3. long long s=0,a=1,i,j;
  4. int main()
  5. {
  6.     for (i=1;i<=20;i++)
  7.     {
  8.         a=a*i;
  9.         s=s+a;
  10.     }
  11.     cout<<s;
  12.     return 0;
  13. }
复制代码

作者: diggersun    时间: 2014-10-21 19:09
第四题

  1. <P>#include<iostream>
  2. using namespace std;
  3. long long s=0,n=1,i,j;
  4. int main()
  5. {
  6.     n=1;i=1;
  7.     while (n<100)
  8.     {
  9.         s=s+n;
  10.         n=n+i;
  11.         i=i+1;
  12.         //cout<<s<<endl<<n<<' ';
  13.     }
  14.     cout<<s;
  15.     return 0;
  16. }</P>
  17. <P> </P>
  18. <P>
  19. </P>
复制代码
各位同学,你们想想,要是N是大于100的最小整数,怎么办?
作者: diggersun    时间: 2014-10-21 19:17
  1. #include<iostream>
  2. using namespace std;
  3. long long s,a,aa,i,k;
  4. int main()
  5. {
  6.     cin>>a>>k;
  7.     for (i=1;i<=k;i++)
  8.     {
  9.         aa=10*aa+a;
  10.         s=s+aa;
  11.     }
  12.     cout<<s;
  13.     return 0;
  14. }
复制代码

作者: hr567    时间: 2014-10-22 20:59
木灵时雨 发表于 2014-10-21 18:21
最后是return....目测你打错了

谢谢你的提醒,我马上就把它改过来。
作者: hr567    时间: 2014-10-22 21:02
admin 发表于 2014-10-21 16:49
楼上真是个牛人呀!还是在初中生就这么牛了!
不过,不建议写这些东西 i/=j;++j;
为了程序的清晰,初学者 ...

谢谢老师的表扬,我最早在《C++ Primer》上看到的程序都是把“++”写在前面的,而且很多样例程序里用的是复合符号,所以习惯这么写了。
作者: hr567    时间: 2014-10-22 21:33
diggersun 发表于 2014-10-21 18:59
第三题 完美做法,千万不要蠢到用两重循环,BTW 楼上的初中生,你的C++是不是那个巨牛的Diggersun老师教的 ...

是的………………
作者: clivia    时间: 2014-10-25 14:11
hr567 发表于 2014-10-22 21:33
是的………………

这里目睹了老师回复的全过程,只能默默地为你流下一滴汗……
作者: clivia    时间: 2014-10-25 15:17
第三题变式解:
  1. #include<iostream>
  2. using namespace std;
  3. long long s=0,a=1,i,j;
  4. int main()
  5. {
  6.     for (i=1; i<=20; i++)
  7.     {
  8.         a=a*i;
  9.         if(i%2==1)
  10.             s=s+a;
  11.     }
  12.     cout<<s;
  13.     return 0;
  14. }
复制代码

作者: hr567    时间: 2014-10-25 19:47
clivia 发表于 2014-10-25 14:11
这里目睹了老师回复的全过程,只能默默地为你流下一滴汗……

习惯就好……
作者: clivia    时间: 2014-10-28 20:06
hr567 发表于 2014-10-25 19:47
习惯就好……

好吧,我淡定……
作者: diggersun    时间: 2014-11-1 17:23
clivia 发表于 2014-10-25 15:17
第三题变式解:

正确!+1
作者: diggersun    时间: 2014-11-1 17:23
clivia 发表于 2014-10-25 15:17
第三题变式解:

正确!+1




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