K12351 生日日期

这篇具有很好参考价值的文章主要介绍了K12351 生日日期。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

K12351 生日日期

题目描述

小科的生日是YY年MM月DD日,他想知道自己出生第10000天纪念的日期,出生日算第0天

输入格式

输入三个整数,分别表示YY,MM,DD,其中 1949≤YY≤2016

输出格式

输出小科身体第一万天以后的日期,格式为YY-MM-DD

输入输出样例

2016 10 31

2044-3-18

解题思路

    是日期类的题目,编写一个函数(或者直接在for循环写)把日期挪到下一天,一直挪10000次即可。
    Last函数是本题的重点,思路主要是:

  1. 把日期+1
  2. 判断日期是否超过了本月的最后一天,如果超过,月份+1,日期为1。
  3. 再判断月份是否为13,如果是就年份+1,月份日期为1。
  4. 同时还要判断闰年的二月要加一。

解题思路2(未编写)

    先确定10000天后的年数,然后再确定月和日,代码没有上一个直接,但实现较为容易。

示例代码

#include<bits/stdc++.h>
using namespace std;
int M[15]={0,31,28,31,30,31,30,31,31,30,31,30,31};
bool run(int Y){
	if(Y%100==0) return Y%400==0;
	return Y%4==0;
}
void Last(int &yy,int &mm,int &dd){
	dd++;
	if(run(yy)&&mm==2&&dd==30) mm++,dd=1;
	else if(!(run(yy)&&mm==2)&&dd>M[mm]) mm++,dd=1;
	if(mm==13) yy++,mm=1,dd=1;
}
int main(){
	int y,m,d;
	cin>>y>>m>>d; 
	for(int i=1;i<=10000;i++){
		Last(y,m,d);
	}
	printf("%d-%d-%d",y,m,d);
	return 0;
}

K12351 生日日期,科丁乐题解,c++,算法,题解,c++,dev-c++,信息学奥赛

其他题解:

【洛谷题解】P1036 [NOIP2002 普及组] 选数
【洛谷题解】P1060 [NOIP2006 普及组] 开心的金明

思维拓展

题目描述

在日常生活中,通过年、月、日这三个要素可以表示出一个唯一确定的日期。

牛牛习惯用8位数字表示一个日期,其中,前4位代表年份,接下来2位代表月 份,最后2位代表日期。显然:一个日期只有一种表示方法,而两个不同的日期的表 示方法不会相同。

牛牛认为,一个日期是回文的,当且仅当表示这个日期的8位数字是回文的。现 在,牛牛想知道:在他指定的两个日期之间包含这两个日期本身),有多少个真实存 在的日期是回文的。

【提示】

一个8位数字是回文的,当且仅当对于所有的i ( 1 <=i<= 8 )从左向右数的第i个 数字和第9-i个数字(即从右向左数的第i个数字)是相同的。

例如:

•对于2016年11月19日,用8位数字20161119表示,它不是回文的。

•对于2010年1月2日,用8位数字20100102表示,它是回文的。

•对于2010年10月2日,用8位数字20101002表示,它不是回文的。

每一年中都有12个月份:

其中,1、3、5、7、8、10、12月每个月有31天;4、6、9、11月每个月有30天;而对于2月,闰年时有29天,平年时有28天。

一个年份是闰年当且仅当它满足下列两种情况其中的一种:

1.这个年份是4的整数倍,但不是100的整数倍;

2.这个年份是400的整数倍。

例如:

•以下几个年份都是闰年:2000、2012、2016。

•以下几个年份是平年:1900、2011、2014。

输入格式

输入包括两行,每行包括一个8位数字。

第一行表示牛牛指定的起始日期。

第二行表示牛牛指定的终止日期。

保证date1和date2都是真实存在的日期,且年份部分一定为4位数字,且首位数字不为0。

保证date1—定不晚于date2。

输出格式

输出一行,包含一个整数,表示在date1和date2之间,有多少个日期是回文的。

输入样例

20000101 
20101231

输出样例

1

正确答案

#include<bits/stdc++.h>
using namespace std;
int M[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
bool hui(int a,int b,int c){
	if(b<10) b*=10;
	else{
		int q=b/10,p=b%10;
		b=q+p*10;
	}
	if(c<10) c*=10;
	else{
		int q=c/10,p=c%10;
		c=q+p*10;
	}	
	return a==c*100+b;
}
bool run(int y){
	if(y%100==0) return y%400;
	return y%4;
}
int main(){
	int y1,m1,d1,y2,m2,d2,ans=0;
	scanf("%4d%2d%2d",&y1,&m1,&d1);
	scanf("%4d%2d%2d",&y2,&m2,&d2);
	if(y1==y2&&m1==m2&&d1==d2&&hui(y1,m1,d1)) {
			ans++;
	}	
	while(!(y1==y2&&m1==m2&&d1==d2)){
		if(hui(y1,m1,d1)) {
			ans++;
		}
		if(m1==12&&d1==31) y1++,m1=1,d1=1;
		else{
			d1++;
			if(run(y1)&&M[2]==28) M[2]++;
			if(d1==M[m1]+1){
				m1++,d1=1;
			}
		}
	}
	cout<<ans;
}

K12351 生日日期,科丁乐题解,c++,算法,题解,c++,dev-c++,信息学奥赛文章来源地址https://www.toymoban.com/news/detail-596240.html

到了这里,关于K12351 生日日期的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Embarcadero Dev-C++输出中文乱码问题

    本人也是听说Dev更新了,才想着下载一个玩玩,谁知道控制台输出的时候居然中文乱码,下面给大家介绍一下如何防止中文乱码问题 我用的是Embarcadero Dev-C++6.3版本 这是我编写的代码,能看到编辑器内是能正常显示中文的 但是控制台显示就是乱码,很明显要么是编辑器的问题

    2023年04月21日
    浏览(36)
  • DEV-C++下载、安装、使用教程(文件、项目)

    Hello,大家好,讲了这么多节课的C++课程,是时候来给你们分享DEV-C++怎么下载、安装啦! 目录 一、下载与安装 二、使用 2.1 创建一个源文件 2.2 创建一个项目 三、Debug  单步调试 四、参考 点击这里进入下载地址   1、找到下载的位置-右击.exe文件-以管理员身份运行。 2、如果

    2024年02月06日
    浏览(32)
  • Dev-c++的小游戏代码(可直接复制)

    今天我给大家一点实用的小游戏,希望支持。 直接上代码: 以上就是代码,可能有点BUG。

    2024年02月14日
    浏览(46)
  • 算法题目题单+题解——图论

    本文为自己做的一部分图论题目,作为题单列出,持续更新。 题单由题目链接和题解两部分组成,题解部分提供简洁题意,代码仓库:Kaiser-Yang/OJProblems。 对于同一个一级标题下的题目,题目难度尽可能做到递增。 题目链接:Luogu P3547 [POI2013] CEN-Price List 题解: 题目链接:

    2024年02月19日
    浏览(38)
  • 【算法题解】38. 括号的生成

    这是一道 中等难度 的题 https://leetcode.cn/problems/generate-parentheses/ 数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。 示例 1: 示例 2: 提示: 1 = n = 8 1 = n = 8 1 = n = 8 分两步操作,先递归生成所有可能的组合,然后判断组合中的每

    2024年02月09日
    浏览(44)
  • 【Dev-c++】C语言数据结构实验——线性表

    实验一 线性表 一、实验目的     1、深刻理解线性结构的特点,以及在计算机内的两种存储结构。     2、熟练掌握线性表的顺序存储结构和链式存储结构,及其它们的基本操作,重点掌握查找、插入和删除等操作。 二、实验要求     1、认真阅读程序, 将未完成的代码补

    2024年02月07日
    浏览(43)
  • 算法训练第一周题解汇总

    大意:在s1找一个最大的 [l,r] 子区间,使其经过从小到大的排序后 能够变成 s2 题解: 先确定最小的区间,然后慢慢扩大。 最小区间的确定:s1和s2第一个不相等的数开始,到最后一个不相等的数结尾 向两边扩大区间:如果本来就是从小到大排序的,那么就算sort也无影响,

    2024年02月01日
    浏览(38)
  • Leetcode题解-算法-动态规划(python版)

    1.1 爬楼梯 70. 爬楼梯(Easy) 走n阶楼梯的方法有两种,1、先走 1 级台阶,再走 n-1 级台阶;2、先走 2 级台阶,再走 n-2 级台阶 f(n) = f(n-1) + f(n-2) 1.2 强盗抢劫 198. 打家劫舍(Medium) 每个房间财产为 nums[0]……nums[n-1]。 假设 0 至 x 间房获得的最大财产为 f(x)。 f(x) = max(f(x-1),f(x-2)+nums[

    2024年02月03日
    浏览(51)
  • 【LeetCode算法系列题解】第36~40题

    【题目描述】 请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。 数字 1-9 在每一行只能出现一次。 数字 1-9 在每一列只能出现一次。 数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次(请参考示例图)。 注意: 一个有效

    2024年02月10日
    浏览(49)
  • 【LeetCode算法系列题解】第61~65题

    【题目描述】 给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。 【示例1】 【示例2】 【提示】 链表中节点的数目在范围 [0, 500] 内 − 100 ≤ N o d e . v a l ≤ 100 -100le Node.valle 100 − 100 ≤ N o d e . v a l ≤ 100 0 ≤ k ≤ 2 ∗ 1 0 9 0le kle 2 * 10^9 0 ≤ k ≤

    2024年02月09日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包