华师一附中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 编辑
第一题,程序正确,判断闰年用到函数,也可以不用,直接在主程序里判断
- #include<iostream>
- using namespace std;
- bool leapyear(int);
- int main()
- {//输入某年某月某日,计算是该年的第几天,星期几
- //输入格式如 2013 11 30
- int y,m,d;
- int dateorder=0;//存放第几天
- long long day=0;
- int mm[12]={31,28,31,30,31,30,31,31,30,31,30,31};
- string dd[7]={"Sun","Mon","Tues","Wed","Thur","Fri","Sat"};
- cin>>y>>m>>d;
- if(leapyear(y)) mm[1]=29;
- for(int i=0;i<m-1;++i) dateorder+=mm[i];//当前月份的前几个月天数加起来
- dateorder+=d;//加上当前月的天数
-
- for(int i=1;i<y;++i){if(leapyear(i)) day+=366;else day+=365;}
- day=(day+dateorder)%7;
- cout<<dd[day];
- }
- bool leapyear(int yy)
- {//判断是否闰年
- if((yy%400==0)||((yy%4==0)&&(yy%100!=0)))
- return true;
- else return false;
- }
复制代码
作者: vc_vitamine 时间: 2014-10-28 16:29
第二题
- #include<iostream>
- #include<cmath>
- using namespace std;
- bool huiwen(int x);
- bool wqpf(int y);
- int main()
- {
- for(int i=0;i<=10000;++i)
- if((huiwen(i))&&(wqpf(i)))
- cout<<i<<' ';
- }
- bool huiwen(int n)
- {
- int nbak=n,r,nn=0;
- while(nbak>0)
- {
- r=nbak%10;
- nn=nn*10+r;
- nbak=nbak/10;
- }
- if(n==nn)
- return true;
- else
- return false;
- }
- bool wqpf(int a)
- {
- if(sqrt(a)==int(sqrt(a)))
- return true;
- else
- return false;
- }
复制代码
作者: vc_vitamine 时间: 2014-10-28 17:41
本帖最后由 vc_vitamine 于 2014-10-29 13:27 编辑
第三题 先用笨办法做出来- using namespace std;
- int main()
- {
- long long x;
- long i,t;//判断x是否素数,i为因子
- bool b;
- t=0;
- cin>>x;
- b=true;
- i=2;
- while((i<=sqrt(x))&&b)
- {
- if(x%i==0) b=false;
- i++;
- }
- if (b)
- cout<<"Yes";
- else
- cout<<"No";
- return 0;
- }
复制代码
作者: vc_vitamine 时间: 2014-10-28 17:45
- #include<iostream>
- using namespace std;
- bool a[101];
- int f,t,s;
- main()
- {
- int n,m;
- cin>>n>>m;//n个人,报数到m出列
- cout<<endl;
- for(int i=1;i<=n;++i) a[i]=false;
- while(f<=n)
- {
- ++t;//枚举位置
- if(t==n+1) t=1;//数组模拟环状
- if(a[t]==false) ++s;//第t个位置还有人,则报数
- if(s==m)
- {
- s=0;//计数器清零
- cout<<t<<' ';
- a[t]=true;
- ++f;//出圈的人数增加一个
- }
- }
- return 0;
- }
复制代码 第四题
欢迎光临 华师一附中OI组 (http://hsyit.cn/) |
Powered by Discuz! X3.2 |