华师一附中OI组

标题: 20141028训练题 [打印本页]

作者: vc_vitamine    时间: 2014-10-28 16:22
标题: 20141028训练题
1.输入某年某月某日,判断这一天是这一年的第几天?并且判断这天星期几。
2.. 10000以内既是回文数又是完全平方数的有哪些?
3.  判断一个很大的数字是不是质数,比如99999997。
4.约瑟夫问题。
作者: vc_vitamine    时间: 2014-10-28 16:28
本帖最后由 vc_vitamine 于 2014-10-28 17:18 编辑

第一题,程序正确,判断闰年用到函数,也可以不用,直接在主程序里判断
  1. #include<iostream>
  2. using namespace std;
  3. bool leapyear(int);
  4. int main()
  5. {//输入某年某月某日,计算是该年的第几天,星期几
  6. //输入格式如 2013 11 30
  7.     int y,m,d;
  8.     int dateorder=0;//存放第几天
  9.     long long day=0;
  10.     int mm[12]={31,28,31,30,31,30,31,31,30,31,30,31};
  11.     string dd[7]={"Sun","Mon","Tues","Wed","Thur","Fri","Sat"};
  12.     cin>>y>>m>>d;
  13.     if(leapyear(y)) mm[1]=29;
  14.     for(int i=0;i<m-1;++i) dateorder+=mm[i];//当前月份的前几个月天数加起来
  15.     dateorder+=d;//加上当前月的天数
  16.    

  17.     for(int i=1;i<y;++i){if(leapyear(i)) day+=366;else day+=365;}
  18.     day=(day+dateorder)%7;
  19.     cout<<dd[day];
  20. }
  21. bool leapyear(int yy)
  22. {//判断是否闰年
  23.      if((yy%400==0)||((yy%4==0)&&(yy%100!=0)))
  24.           return true;
  25.      else return false;
  26. }
复制代码

作者: vc_vitamine    时间: 2014-10-28 16:29
第二题
  1. #include<iostream>
  2. #include<cmath>
  3. using namespace std;
  4. bool huiwen(int x);
  5. bool wqpf(int y);

  6. int main()
  7. {
  8.     for(int i=0;i<=10000;++i)
  9.      if((huiwen(i))&&(wqpf(i)))
  10.      cout<<i<<' ';
  11. }
  12. bool huiwen(int n)
  13. {
  14.     int nbak=n,r,nn=0;
  15.     while(nbak>0)
  16.     {
  17.         r=nbak%10;
  18.         nn=nn*10+r;
  19.         nbak=nbak/10;
  20.     }
  21.     if(n==nn)
  22.         return true;
  23.     else
  24.         return false;

  25. }
  26. bool wqpf(int a)
  27. {
  28.    if(sqrt(a)==int(sqrt(a)))
  29.     return true;
  30.    else
  31.     return false;
  32. }
复制代码

作者: vc_vitamine    时间: 2014-10-28 17:41
本帖最后由 vc_vitamine 于 2014-10-29 13:27 编辑

第三题  先用笨办法做出来
  1. using namespace std;
  2. int main()
  3. {
  4. long long x;
  5. long i,t;//判断x是否素数,i为因子
  6. bool b;
  7. t=0;
  8. cin>>x;
  9. b=true;
  10. i=2;
  11. while((i<=sqrt(x))&&b)
  12. {
  13. if(x%i==0) b=false;
  14. i++;
  15. }
  16. if (b)
  17. cout<<"Yes";
  18. else
  19. cout<<"No";
  20. return 0;
  21. }


复制代码



作者: vc_vitamine    时间: 2014-10-28 17:45
  1. #include<iostream>
  2. using namespace std;
  3. bool a[101];
  4. int f,t,s;
  5. main()
  6. {
  7.   int n,m;
  8.   cin>>n>>m;//n个人,报数到m出列
  9.   cout<<endl;
  10.   for(int i=1;i<=n;++i) a[i]=false;
  11.   while(f<=n)
  12.   {
  13.       ++t;//枚举位置
  14.       if(t==n+1) t=1;//数组模拟环状
  15.       if(a[t]==false) ++s;//第t个位置还有人,则报数
  16.       if(s==m)
  17.       {
  18.           s=0;//计数器清零
  19.           cout<<t<<' ';
  20.           a[t]=true;
  21.           ++f;//出圈的人数增加一个
  22.       }

  23.   }
  24.     return 0;
  25. }
复制代码
第四题





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