2013蓝桥杯【初赛试题】高斯日记

高斯日记
大数学家高斯有个好习惯:无论如何都要记日记。
他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210
后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几天。这或许也是个好习惯,它时时刻刻提醒着主人:日子又过去一天,还有多少时光可以用于浪费呢?
高斯出生于:1777年4月30日。
在高斯发现的一个重要定理的日记上标注着:5343,因此可算出那天是:1791年12月15日。
高斯获得博士学位的那天日记上标着:8113
请你算出高斯获得博士学位的年月日。

提交答案的格式是:yyyy-mm-dd, 例如:1980-03-21
请严格按照格式,通过浏览器提交答案。
注意:只提交这个日期,不要写其它附加内容,比如:说明性的文字。

 

 

#include<stdio.h>
int Run(int n)//判断闰年的函数
{
    if(n%400==0||(n%100!=0&&n%4==0)) return 1;
    return 0;
}
int month(int n,int year)//根据年份,判断月份的天数
{
    switch(n)
    {
             case 1:return 31;break;
             case 2:{
                      if(Run(year))
                      return 29;
                      else
                      return 28;
                      break;
                  }
             case 3:return 31;break;
             case 4:return 30;break;
             case 5:return 31;break;
             case 6:return 30;break;
             case 7:return 31;break;
             case 8:return 31;break;
             case 9:return 30;break;
             case 10:return 31;break;
             case 11:return 30;break;
             case 12:return 31;break;
    }

}
int main()
{
    int i,j,flag,n,m,sum,x;
    scanf("%d",&n);
    m=1777;sum=0;
    for(i=5;i<=12;i++)
    sum+=month(i,1777);//这个代码只能算超过1778年的
    for(i=1779;i<2000;i++)
    {
      if(Run(i)==1)
      {
         if(sum+366>=n)
         {
           flag=i-1;
           break;
         }
         else
         sum+=366;
      }
      else
      {
          if(sum+365>=n)
          {
            flag=i-1;
            break;
          }
          else
          sum+=365;
      }
    }
    if(sum!=n)
    {
        for(i=1;i<=12;i++)
       {
           if(sum+month(i,flag)<n)
           sum+=month(i,flag);
           else
           {
               if(sum+month(i,flag)==n)
               {
                   printf("%d-%d-%d\n",flag,i,month(i,flag));
                   break;
               }
               else
               {
                   x=0;
                   while(sum!=n)
                   {
                      sum+=1;
                      x+=1;
                   }
                   printf("%d-%d-%d\n",flag,i,x-1);//题中4月30那一天也算,所以算出的天数要减去一
                   break;
               }
           }
       }
    }
    return 0;
}

 

时间: 2024-10-31 10:04:48

2013蓝桥杯【初赛试题】高斯日记的相关文章

蓝桥杯 历届试题 公式求值 (想了很久了,想不明白,才来请教的,麻烦各位了)

问题描述 蓝桥杯 历届试题 公式求值 (想了很久了,想不明白,才来请教的,麻烦各位了) 问题描述 输入n, m, k,输出下面公式的值. 其中C_n^m是组合数,表示在n个人的集合中选出m个人组成一个集合的方案数.组合数的计算公式如下. 输入格式 输入的第一行包含一个整数n:第二行包含一个整数m,第三行包含一个整数k. 输出格式 计算上面公式的值,由于答案非常大,请输出这个值除以999101的余数. 样例输入 3 1 3 样例输出 162 样例输入 20 10 10 样例输出 359316 数据

蓝桥试题高斯日记 ++-关于蓝桥试题,高斯日记问题

问题描述 关于蓝桥试题,高斯日记问题 先附上我的代码,再说我的思路. #include using namespace std; int main() { int year=1777,month=4,day=30; int n=8113,leap; //cin>>n; n=n-285;//经过285天后日期变为1778-1-1 year=1778;month=1;day=1; int a=0,b=0;//用于记录闰年和平年个数 int mon[12]={31,29,31,30,31,30,31

蓝桥杯 历届试题 大臣的旅费

历届试题 大臣的旅费   时间限制:1.0s   内存限制:256.0MB        问题描述 很久以前,T王国空前繁荣.为了更好地管理国家,王国修建了大量的快速路,用于连接首都和王国内的各大城市. 为节省经费,T国的大臣们经过思考,制定了一套优秀的修建方案,使得任何一个大城市都能从首都直接或者通过其他大城市间接到达.同时,如果不重复经过大城市,从首都到达每个大城市的方案都是唯一的. J是T国重要大臣,他巡查于各大城市之间,体察民情.所以,从一个城市马不停蹄地到另一个城市成了J最常做的事情.

2013蓝桥杯【初赛试题】第39阶台阶

第39阶台阶 小明刚刚看完电影<第39级台阶>,离开电影院的时候,他数了数礼堂前的台阶数,恰好是39级!  站在台阶前,他突然又想着一个问题:  如果我每一步只能迈上1个或2个台阶.先迈左脚,然后左右交替,最后一步是迈右脚,也就是说一共要走偶数步.那么,上完39级台阶,有多 少种不同的上法呢?  请你利用计算机的优势,帮助小明寻找答案. 要求提交的是一个整数. 注意:不要提交解答过程,或其它的辅助说明文字.   思路:(原先用斐波那契额真是大错特错.....)这一题的重点是偶数步(先迈左右脚是

2013蓝桥杯【初赛试题】前缀判断

前缀判断 如下的代码判断 needle_start指向的串是否为haystack_start指向的串的前缀,如不是,则返回NULL. 比如:"abcd1234" 就包含了 "abc" 为前缀  char* prefix(char* haystack_start, char* needle_start) {  char* haystack = haystack_start;  char* needle = needle_start;    while(*haystac

蓝桥杯 历届试题 危险系数

  历届试题 危险系数  时间限制:1.0s   内存限制:256.0MB         问题描述 抗日战争时期,冀中平原的地道战曾发挥重要作用.   地道的多个站点间有通道连接,形成了庞大的网络.但也有隐患,当敌人发现了某个站点后,其它站点间可能因此会失去联系.   我们来定义一个危险系数DF(x,y):   对于两个站点x和y (x != y), 如果能找到一个站点z,当z被敌人破坏后,x和y不连通,那么我们称z为关于x,y的关键点.相应的,对于任意一对站点x和y,危险系数DF(x,y)就

蓝桥杯 历届试题 连号区间数

历届试题 连号区间数   时间限制:1.0s   内存限制:256.0MB        问题描述 小明这些天一直在思考这样一个奇怪而有趣的问题: 在1~N的某个全排列中有多少个连号区间呢?这里所说的连号区间的定义是: 如果区间[L, R] 里的所有元素(即此排列的第L个到第R个元素)递增排序后能得到一个长度为 R-L+1的"连续"数列,则称这个区间连号区间. 当N很小的时候,小明可以很快地算出答案,但是当N变大的时候,问题就不是那么简单了,现在 小明需要你的帮助. 输入格式 第一行是

蓝桥杯 历届试题 带分数

历届试题 带分数   时间限制:1.0s   内存限制:256.0MB 问题描述 100 可以表示为带分数的形式:100 = 3 + 69258 / 714. 还可以表示为:100 = 82 + 3546 / 197. 注意特征:带分数中,数字1~9分别出现且只出现一次(不包含0). 类似这样的带分数,100 有 11 种表示法. 输入格式 从标准输入读入一个正整数N (N<1000*1000) 输出格式 程序输出该数字用数码1~9不重复不遗漏地组成带分数表示的全部种数. 注意:不要求输出每个表

蓝桥杯-历届试题 剪格子

历届试题 剪格子   时间限制:1.0s   内存限制:256.0MB        问题描述 如下图所示,3 x 3 的格子中填写了一些整数. +--*--+--+ |10* 1|52| +--****--+ |20|30* 1| *******--+ | 1| 2| 3| +--+--+--+ 我们沿着图中的星号线剪开,得到两个部分,每个部分的数字和都是60. 本题的要求就是请你编程判定:对给定的m x n 的格子中的整数,是否可以分割为两个部分,使得这两个区域的数字和相等. 如果存在多种解