高斯日记

  这两天在准备蓝桥杯的杯赛,所以这里写一些它往年的题目我和做的解决程序!以用来整理!

  第四届比赛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剩下的那个值,就是某月的具体某一天了。

  

  Ok,请原谅我叙述的比较混乱,下面我把代码贴上来,希望能够帮助大家理解:

 1 #include<errno.h>
 2 #include<string.h>
 3 #include<stdlib.h>
 4 #include<stdarg.h>
 5 #include<stdio.h>
 6 int main(int argc,char *argv[])
 7 {
 8     int days;
 9     int year = 1777;
10     int month = 5;
11     int flag = 0;   //是否为闰年的标记
12     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}};
13
14     printf("请输入天数:");
15     scanf("%d",&days);
16
17     //在减1之前5.1为第一天
18
19     days -= 1;    //由于出生的那天即为第一天,所以要减1
20
21     if(days <= 0)
22     {
23     days += month_a[0][4];    //1777年的四月份
24     month--;
25     }
26
27     //先减去4年
28     while(days > 1461)
29     {
30     days -= 1461;
31     year += 4;
32     }
33     //判断那一年是否为闰年
34     if(year > 1095)
35     flag = 1;
36     //再减去4年中的年份
37     while(days > 365)
38     {
39     days -= 365;
40     year += 1;
41     }
42     for(;month<=12 && days>month_a[flag][month];month++)
43     {
44     days -= month_a[flag][month];
45     }
46
47     printf("%d-%d-%d\n",year,month,days);
48
49     return 0;
50 }

    代码中需要说明一下的是,为什么我要在刚开始让days减少1。因为高斯是4月30号出生的,四月30号即是第一天。而在这个程序中我是通过days来指定最后日期中的天的。也就是说,如果我输入的是1,那么这个days就应该变成30(代表1777年的4月30号中的这个30),所以要减去1。也就是说,如果在刚开始我没有减少1的话,那么就代表的是1777年的5月1号为第一天。

    对了,最后贴一个运行结果的截图上来吧:

    

    OK,就是这些内容了,第一回写这种描述算法的博客,叙述地比较混乱,还望见谅!

时间: 2024-10-12 23:53:00

高斯日记的相关文章

第四届蓝桥杯 c/c++真题

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

闲的无聊,,,

//蓝桥,高斯日记 #include <stdio.h>#include <iostream>#include <string.h>#include <math.h>using namespace std; int a[20] = {0,31,28,31,30,31,30,31,31,30,31,30,31};int leap(int y){    if(y%400 == 0 || (y%4==0 && y%100!=0))    retur

2.3日期类题目题解

今天追的综艺更新了,没想到超长待机三个小时,再加上乱七八糟的事情耽误了很多的时间,没有时间更新今日份所有题目的总结了.恰好今天这套题很多都是一个类型的题目那就分开整理吧,今天更新计算日期类的题目,其他的等明天继续更. 关于计算日期类的题目,可以说都很简单了,而且一般都是小题.就算不会代码差不多电脑自带的日期啊.execl啊都能做,所以我之前都是用的vbs做的,挺方便的.但是听大佬说国赛没有execl什么的正好今天的题有几道关于日期的题目,趁这个机会整理出来.稍后更新一篇常用的方法吧. 第一题:高

时间类问题

1.闰年判断,4年一闰,100年不闰,400年再闰 1 bool isLeap(int year){ 2 return (year%4==0&&year%100!=0)||(year%400==0); 3 } 闰年2月---29     平年2月-----284.6.9.11月------------30 其他月份则为31天 2.求指定日期是星期几 基姆拉尔森计算公式: w=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400+1)%7 结果对应关系     0:星期日 

opnecv日记_GaussianBlur函数——高斯滤波 中文解释参数含义

参考:http://m.blog.csdn.net/blog/cau_eric/27710423 函数原型: void GaussianBlur(InputArray src, OutputArray dst, Size ksize, double sigmaX, double sigmaY=0, int borderType=BORDER_DEFAULT); 参数详解如下: src,输入图像,即源图像,填Mat类的对象即可.它可以是单独的任意通道数的图片,但需要注意,图片深度应该为CV_8U,

友链&amp;&amp;日记

上面友链,下面日记 友人链 最喜欢galgameの加藤聚聚 初三一本&&\(ACG\)姿势比我还丰厚的yx巨巨 天天切黑题&&更喜欢galgame的shadowice czx ZigZag胖胖 文文 fsy 纳尔 大佬链(抄题解对象) 苏卿念 attack yyb zsy FlashHu MashiroSky ------------2019 03 31------------- 一天四场模拟赛什么的还是有点爽的-- ------------2019 03 30------

小白日记10:kali渗透测试之端口扫描-UDP、TCP、僵尸扫描、隐蔽扫描

端口扫描 二三四层发现的目的只是为了准确发现所有活着主机IP,确定攻击面,端口扫描即发现攻击点,发现开放端口.端口对应网络服务及应用端程序,服务端程序的漏洞通过端口攻入.[所有的扫描结果,都不要完全相信] 一个端口就是一个潜在的通信通道,也就是一个入侵通道.对目标计算机进行端口扫描,能得到许多有用的信息.进行扫描的方法很多,可以是手工进行扫描,也可以用端口扫描软件进行扫描.在手工进行扫描时,需要熟悉各种命令.对命令执行后的输出进行分析.用扫描软件进行扫描时,许多扫描器软件都有分析数据的功能.通过

小白日记8:kali渗透测试之主动信息收集(二)三层发现:ping、traceroute、scapy、nmap、fping、Hping

三层发现 三层协议有:IP以及ICMP协议(internet管理协议).icmp的作用是用来实现intenet管理的,进行路径的发现,网路通信情况,或者目标主机的状态:在三层发现中主要使用icmp协议,arp协议属于二层协议,它是基于广播的,所以不可路由.而ICMP协议是可以路由的,理论上可以使用icmp协议发现全球的ip,如果没有边界防火墙(禁止icmp的探测包)进行过滤的话,对目标主机进行扫描,则会收到相应的响应,从而进行捕捉[有边界防火墙的现象比较普遍],但是三层发现的扫描速度也较二层要慢

poj_1222_高斯消元

第一次学习使用高斯消元,将灯板化为线性方程组,进行求解. /*######################################################################### # File Name: poj_1222.cpp # Author: CaoLei # Created Time: 2015/7/20 15:48:04 ###################################################################