蓝桥杯 高斯日记
2016-06-01 16:22
351 查看
准备蓝桥杯的杯赛,整理总结下往年的题目!
第四届比赛C/C++A组第一题,高斯日记,题目如下:
大数学家高斯有个好习惯:无论如何都要记日记。他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210。后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几天。这或许也是个好习惯,它时时刻刻提醒着主人:日子又过去一天,还有多少时光可以用于浪费呢?
高斯出生于:1777年4月30日。在高斯发现的一个重要定理的日记上标注着:5343,因此可算出那天是:1791年12月15日。
高斯获得博士学位的那天日记上标着:8113。请你算出高斯获得博士学位的年月日。
提交答案的格式是:yyyy-mm-dd, 例如:1980-03-21
我的解题思路如下,首先程序获取一个天数days,然后先把这个days不断减少1461(即四年的天数),同时年份year从1777开始不断加4,直到这个days小于1461。
接下来再判断这个days所指定的那一天是否为闰年,这个就是看days现在是否小于1095,因为前三年平年加起来是1095,如果大于1095,则说明那个days所指定的日期为闰年。
OK,判断好了年份之后,再不断减少月份所代表的天数,同时记录月份的变量month不断增加,最后days剩下的那个值,就是某月的具体某一天了。
<span style="color:#333333;">#include<errno.h>
#include<string.h>
#include<stdlib.h>
#include<stdarg.h>
#include<stdio.h>
int main(int argc,char *argv[])
{
int days;
int year = 1777;
int month = 5;
int flag = 0; //是否为闰年的标记
int month_a[2][13]={{-1,31,28,31,30,31,30,31,31,30,31,30,31},{-1,31,29,31,30,31,30,31,31,30,31,30,31}};
printf("请输入天数:");
scanf("%d",&days);
//在减1之前5.1为第一天
days -= 1; //由于出生的那天即为第一天,所以要减1
</span><strong><span style="color:#ff0000;"> if(days <= 0)
{
days += month_a[0][4]; //1777年的四月份
month--;
} </span></strong><span style="color:#333333;">
//先减去4年
while(days > 1461)
{
days -= 1461;
year += 4;
}
//判断那一年是否为闰年
if(days > 1095)
flag = 1;
//再减去4年中的年份
while(days > 365)
{
days -= 365;
year += 1;
}
for(;month<=12 && days>month_a[flag][month];month++)
{
days -= month_a[flag][month];
}
printf("%d-%d-%d\n",year,month,days);
return 0;
}</span>
第四届比赛C/C++A组第一题,高斯日记,题目如下:
大数学家高斯有个好习惯:无论如何都要记日记。他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210。后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几天。这或许也是个好习惯,它时时刻刻提醒着主人:日子又过去一天,还有多少时光可以用于浪费呢?
高斯出生于:1777年4月30日。在高斯发现的一个重要定理的日记上标注着:5343,因此可算出那天是:1791年12月15日。
高斯获得博士学位的那天日记上标着:8113。请你算出高斯获得博士学位的年月日。
提交答案的格式是:yyyy-mm-dd, 例如:1980-03-21
我的解题思路如下,首先程序获取一个天数days,然后先把这个days不断减少1461(即四年的天数),同时年份year从1777开始不断加4,直到这个days小于1461。
接下来再判断这个days所指定的那一天是否为闰年,这个就是看days现在是否小于1095,因为前三年平年加起来是1095,如果大于1095,则说明那个days所指定的日期为闰年。
OK,判断好了年份之后,再不断减少月份所代表的天数,同时记录月份的变量month不断增加,最后days剩下的那个值,就是某月的具体某一天了。
<span style="color:#333333;">#include<errno.h>
#include<string.h>
#include<stdlib.h>
#include<stdarg.h>
#include<stdio.h>
int main(int argc,char *argv[])
{
int days;
int year = 1777;
int month = 5;
int flag = 0; //是否为闰年的标记
int month_a[2][13]={{-1,31,28,31,30,31,30,31,31,30,31,30,31},{-1,31,29,31,30,31,30,31,31,30,31,30,31}};
printf("请输入天数:");
scanf("%d",&days);
//在减1之前5.1为第一天
days -= 1; //由于出生的那天即为第一天,所以要减1
</span><strong><span style="color:#ff0000;"> if(days <= 0)
{
days += month_a[0][4]; //1777年的四月份
month--;
} </span></strong><span style="color:#333333;">
//先减去4年
while(days > 1461)
{
days -= 1461;
year += 4;
}
//判断那一年是否为闰年
if(days > 1095)
flag = 1;
//再减去4年中的年份
while(days > 365)
{
days -= 365;
year += 1;
}
for(;month<=12 && days>month_a[flag][month];month++)
{
days -= month_a[flag][month];
}
printf("%d-%d-%d\n",year,month,days);
return 0;
}</span>
//<p style="margin-top: 20px; margin-bottom: 20px; padding-top: 0px; padding-bottom: 0px; font-family: 'Microsoft Yahei', 微软雅黑, arial, 宋体, sans-serif; font-size: 16px; line-height: 28px; text-align: justify;">说明一下:argc命令行总的参数的个数,即argv中元素的格式。</p><p style="margin-top: 20px; margin-bottom: 20px; padding-top: 0px; padding-bottom: 0px; font-family: 'Microsoft Yahei', 微软雅黑, arial, 宋体, sans-serif; font-size: 16px; line-height: 28px; text-align: justify;">* argv[ ]: 字符串数组,用来存放指向你的字符串参数的指针数组,每一个元素指向一个参数</p><p style="margin-top: 20px; margin-bottom: 20px; padding-top: 0px; padding-bottom: 0px; font-family: 'Microsoft Yahei', 微软雅黑, arial, 宋体, sans-serif; font-size: 16px; line-height: 28px; text-align: justify;">argv[0]:指向程序的全路径名</p><p style="margin-top: 20px; margin-bottom: 20px; padding-top: 0px; padding-bottom: 0px; font-family: 'Microsoft Yahei', 微软雅黑, arial, 宋体, sans-serif; font-size: 16px; line-height: 28px; text-align: justify;">argv[1]:指向在DOS命令行中执行程序名后的第一个字符串。</p><p style="margin-top: 20px; margin-bottom: 20px; padding-top: 0px; padding-bottom: 0px; font-family: 'Microsoft Yahei', 微软雅黑, arial, 宋体, sans-serif; font-size: 16px; line-height: 28px; text-align: justify;">argv[2]:指向第二个字符串。</p>
相关文章推荐
- OpenSSLX509证书操作函数
- js跳转页面的几种方法
- poj 3278 水bfs
- 利用Native Client OLEDB 11 高效率地对SQL SERVER 进行查询和插入操作
- OpenGL顶点数组
- 强类型,弱类型,静态,动态语言
- CSS布局display,position, float属性
- 高项速记
- 几个学习用的c语言开源项目 和c++工具
- 安卓自定义布局实现
- 用Visual Studio(C#) 实现Excel数据导入(映射)
- [置顶] 日志审计-apache攻击日志分析
- Cocoapods终极版安装教程
- button/input链接方式全攻略
- 【Linux系列教程】03.链接命令--软连接和硬链接的区别
- socket多客户端连接服务器
- mysql将查询结果导入文件
- POJ2352 Stars 树状数组
- 使用pt-query-digest分析慢查询日志
- hibernate中的java对象有几种状态,其相互关系如何(区别和相互转换)