蓝桥杯 第四届C/C++预赛真题(1) 高斯日记(数学题,年份处理)
2014-03-17 18:14
507 查看
题目标题: 高斯日记
大数学家高斯有个好习惯:无论如何都要记日记。
他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210
后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几天。这或许也是个好习惯,它时时刻刻提醒着主人:日子又过去一天,还有多少时光可以用于浪费呢?
高斯出生于:1777年4月30日。
在高斯发现的一个重要定理的日记上标注着:5343,因此可算出那天是:1791年12月15日。
高斯获得博士学位的那天日记上标着:8113
请你算出高斯获得博士学位的年月日。
提交答案的格式是:yyyy-mm-dd, 例如:1980-03-21
请严格按照格式,通过浏览器提交答案。
注意:只提交这个日期,不要写其它附加内容,比如:说明性的文字。
数学题。
这题不难,就是麻烦,考虑好细节,否则差了那么一两天这题就没分了。
注意:出生那天也要算。
解答:1799-07-16
代码(有些臃肿,主要是switch语句,可以用数组代替):
Freecode : www.cnblogs.com/yym2013
大数学家高斯有个好习惯:无论如何都要记日记。
他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210
后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几天。这或许也是个好习惯,它时时刻刻提醒着主人:日子又过去一天,还有多少时光可以用于浪费呢?
高斯出生于:1777年4月30日。
在高斯发现的一个重要定理的日记上标注着:5343,因此可算出那天是:1791年12月15日。
高斯获得博士学位的那天日记上标着:8113
请你算出高斯获得博士学位的年月日。
提交答案的格式是:yyyy-mm-dd, 例如:1980-03-21
请严格按照格式,通过浏览器提交答案。
注意:只提交这个日期,不要写其它附加内容,比如:说明性的文字。
数学题。
这题不难,就是麻烦,考虑好细节,否则差了那么一两天这题就没分了。
注意:出生那天也要算。
解答:1799-07-16
代码(有些臃肿,主要是switch语句,可以用数组代替):
#include <iostream> using namespace std; struct Date{ int y,m,d; }; bool run(int y) { if(y%100==0 && y%400==0) return true; if(y%4==0) return true; return false; } Date f(Date birthday,int lastday) //参数为出生日期和持续天数,输出lastday天之后的日期 { int y = birthday.y; int m = birthday.m; int d = birthday.d; lastday--; //出生那天也算 int last = lastday; while(last){ //剩余天数 if(last==lastday){ //出生那年 int rday=0; //存储如果是闰年多出的那一天 if(run(y)) ++rday; //是闰年 switch(m){ case 1: last-=(31-d)+334+rday; break; case 2: last-=(28+rday-d)+306; break; case 3: last-=(31-d)+275; break; case 4: last-=(30-d)+245; break; case 5: last-=(31-d)+214; break; case 6: last-=(30-d)+184; break; case 7: last-=(31-d)+153; break; case 8: last-=(31-d)+122; break; case 9: last-=(30-d)+92; break; case 10: last-=(31-d)+61; break; case 11: last-=(30-d)+31; break; case 12: last-=(31-d); break; default:break; } y++; } else if(run(y) && last>366){ //当前年份是闰年且剩余天数还有一年以上 last-=366; y++; } else if(!run(y) && last>365){ //当前年份不是闰年且剩余天数还有一年以上 last-=365; y++; } else{ //剩余天数不到1年 int rday=0; //存储如果是闰年多出的那一天 if(run(y)) ++rday; //是闰年 if(1<=last && last<=31){ //1月 m=1; d=last; } else if(32<=last && last<=59+rday){ //2月 m=2; d=last-31; } else if(60+rday<=last && last<=90+rday){ //3月 m=3; d=last-59-rday; } else if(91+rday<=last && last<=120+rday){ //4月 m=4; d=last-90-rday; } else if(121+rday<=last && last<=151+rday){ //5月 m=5; d=last-120-rday; } else if(152+rday<=last && last<=181+rday){ //6月 m=6; d=last-151-rday; } else if(182+rday<=last && last<=212+rday){ //7月 m=7; d=last-181-rday; } else if(213+rday<=last && last<=243+rday){ //8月 m=8; d=last-212-rday; } else if(244+rday<=last && last<=273+rday){ //9月 m=9; d=last-243-rday; } else if(274+rday<=last && last<=304+rday){ //10月 m=10; d=last-273-rday; } else if(305+rday<=last && last<=334+rday){ //11月 m=11; d=last-304-rday; } else if(335+rday<=last && last<=365+rday){ //12月 m=12; d=last-334-rday; } last=0; } } Date date; date.y = y; date.m = m; date.d = d; return date; } int main() { Date birthday,date; birthday.y = 1777; birthday.m = 4; birthday.d = 30; int lastday = 8113; date = f(birthday,lastday); //获得lastday天之后的日期 cout<<date.y<<'-'; if(date.m/10==0) cout<<'0'<<date.m<<'-'<<date.d<<endl; else cout<<date.m<<'-'<<date.d<<endl; return 0; }
Freecode : www.cnblogs.com/yym2013
相关文章推荐
- 蓝桥杯 第三届C/C++预赛真题(2) 古堡算式(数学题)
- 蓝桥杯第四届预赛1高斯日记
- 高斯日记-第四届蓝桥杯c/c++B组
- 第四届 蓝桥杯C/C++ B组 第1题高斯日记
- 2013年第四届蓝桥杯省赛C++B组——1、高斯日记
- 高斯日记-2013年第四届蓝桥杯软件大赛预赛第一题。
- 蓝桥杯 第三届C/C++预赛真题(3) 比酒量(数学题)
- 蓝桥杯 第四届C/C++预赛真题(2) 马虎的算式(穷举)
- 蓝桥杯 第四届C/C++预赛真题(6) 三部排序(水题)
- 第四届蓝桥杯C++A组——高斯日记
- “蓝桥杯”第四届本科B组预赛试题: 高斯日记
- 2013第三届蓝桥杯C/C++本科预赛1 高斯日记
- “蓝桥杯”第四届本科B组预赛试题: 高斯日记
- 蓝桥杯 第三届C/C++预赛真题(1) 微生物增值(数学题)
- 蓝桥杯 第四届C/C++预赛真题(3) 第39级台阶(递归)
- 蓝桥杯 第三届C/C++预赛真题(6) 大数乘法(数学题)
- 蓝桥杯 第四届C/C++预赛真题(5) 前缀判断(水题)
- 密码发生器--第三届蓝桥杯预赛真题 c++本科组 第8题(我用java做的)
- 2013第四届蓝桥杯 C/C++C组真题及题解
- 2012年蓝桥杯预赛题-高斯日记