首页 > 其他分享 >P5711 【深基3.例3】闰年判断

P5711 【深基3.例3】闰年判断

时间:2024-02-04 13:13:19浏览次数:35  
标签:闰年 int decision 深基 样例 flag year% P5711

题目

写在开头:本题并不容易出错,但是需要一些常识,记录的目的也只是为了代码优化

原题目位于:[P5711 【深基3.例3】闰年判断 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)]

【深基3.例3】闰年判断

题目描述

输入一个年份,判断这一年是否是闰年,如果是输出 $1$,否则输出 $0$。

输入格式

输入一个正整数 $n$,表示年份。

输出格式

输出一行。如果输入的年份是闰年则输出 $1$,否则输出 $0$。

样例 #1

样例输入 #1

1926

样例输出 #1

0

样例 #2

样例输入 #2

1900

样例输出 #2

0

样例 #3

样例输入 #3

2000

样例输出 #3

1

样例 #4

样例输入 #4

1996

样例输出 #4

1

提示

数据保证,1582 <=n <=2020 且年份为自然数。

常识补充

引用自百度百科:[https://baike.baidu.com/item/闰年/27098?fr=ge_ala#6]

1582年以来公历的置闰规则:

普通闰年:公历年份是4的倍数,且不是100的倍数的,为闰年(如2004年、2020年等就是闰年)。

世纪闰年:公历年份是整百数的,必须是400的倍数才是闰年(如1900年不是闰年,2000年是闰年)。

对于上述代码

判定方法

公历闰年计算

(按一回归年365天5小时48分45.5秒)

1、非整百年份:能被4整除的是闰年。(如2004年就是闰年,2001年不是闰年)

2、整百年份:能被400整除的是闰年。(如2000年是闰年,1900年不是闰年)

3、对于数值很大的年份:如果这一年能被3200整除,那么这一年不是闰年,但如果这一年能被172800整除,则为闰年。如172800年是闰年,86400年不是闰年(因为虽然能被3200整除,但不能被172800整除)

代码及优化

针对于本题目的年份取值范围而言,根据普通的置闰规则就可以比较方便的解决了

#include<bits/stdc++.h>
int main()
{
    int year=0;
    scanf("%d",&year);
    printf("%d",(year%100!&&year%4==0)||(year%100==0&&year%400==0)?1:0);
    return 0;
}

针对于判定方法那三个规则而言,起初我写出了代码是下面这样(感觉我有搓屎山的潜力啊

#include<bits/stdc++.h>
int main()
{
	int flag = 0;
	int year = 0;
	int decision =0;
	scanf("%d",&year);
	if(year%172800==0) { flag = 1;decision=1;}
	if(!decision&&year%3200==0) {flag=0;decision=1;}
	if(!decision&&year%400==0) {flag=1;decision=1;}
	if(!decision&&year%100==0) {flag=0;decision=1;}
	if(!decision&&year%4==0) {flag=1;decision=1;}
	printf("%d",flag);
	return 0; 
}

但是这种写法未免太过繁琐,因此参考第一种写法

#include<bits/stdc++.h>
int main()
{
    int year = 0;
    scanf("%d",&year);
    int flag = year%172800==0||(year%3200!=0&&year%400==0)||(year%100!=0&&year%4==0)?1:0;
    printf("%d",flag);
    return 0;
}

相对于刚刚的写法会简明一点。这种优化的方法是只关心是闰年的条件,将满足的年份判断为闰年,其余年份都不是闰年。

标签:闰年,int,decision,深基,样例,flag,year%,P5711
From: https://www.cnblogs.com/chuwuhu/p/18005993

相关文章

  • P2433 【深基1-2】小学数学 N 合一
    题目原题目在[P2433【深基1-2】小学数学N合一-洛谷|计算机科学教育新生态(luogu.com.cn)]【深基1-2】小学数学N合一题目描述问题1请输出IloveLuogu!问题2这里有$10$个苹果,小A拿走了$2$个,Uim拿走了$4$个,八尾勇拿走剩下的所有的苹果。我们想知道:小......
  • 【洛谷 P2249】【深基13.例1】查找(向量+二分查找+递归)
    【深基13.例1】查找题目描述输入个不超过的单调不减的(就是后面的数字不小于前面的数字)非负整数,然后进行次询问。对于每次询问,给出一个整数,要求输出这个数字在序列中第一次出现的编号,如果没有找到的话输出。输入格式第一行个整数和,表示数字个数和询问次数。第二行......
  • 【洛谷 P2249】【深基13.例1】查找(向量+lower_bound)
    【深基13.例1】查找题目描述输入个不超过的单调不减的(就是后面的数字不小于前面的数字)非负整数,然后进行次询问。对于每次询问,给出一个整数,要求输出这个数字在序列中第一次出现的编号,如果没有找到的话输出。输入格式第一行个整数和,表示数字个数和询问次数。第二行......
  • 洛谷题单指南-排序-P1923 【深基9.例4】求第 k 小的数
    原题链接:https://www.luogu.com.cn/problem/P1923题意解读:要最快的求第k小的数,O(n)的做法是利用快排的思想对数据进行划分第一步、取分界点x,通常设x=a[(l+r)/2]第二步、将小于x的挪到x左边,将大于x的挪到x右边第三步、比较,如果x左边的个数大于k,则继续递归处理左边,否则递......
  • P5739 【深基7.例7】计算阶乘
    1.题目介绍【深基7.例7】计算阶乘题目描述求\(n!\),也就是\(1\times2\times3\dots\timesn\)。挑战:尝试不使用循环语句(for、while)完成这个任务。输入格式第一行输入一个正整数\(n\)。输出格式输出一个正整数,表示\(n!\)。样例#1样例输入#13样例输出#16提示......
  • P5738 【深基7.例4】歌唱比赛
    1.题目介绍【深基7.例4】歌唱比赛题目描述\(n(n\le100)\)名同学参加歌唱比赛,并接受\(m(m\le20)\)名评委的评分,评分范围是\(0\)到\(10\)分。这名同学的得分就是这些评委给分中去掉一个最高分,去掉一个最低分,剩下\(m-2\)个评分的平均数。请问得分最高的同学分数是多少?......
  • P5737 【深基7.例3】闰年展示
    1.题目介绍【深基7.例3】闰年展示题目描述输入\(x,y\),输出\([x,y]\)区间中闰年个数,并在下一行输出所有闰年年份数字,使用空格隔开。输入格式输入两个正整数\(x,y\),以空格隔开。输出格式第一行输出一个正整数,表示\([x,y]\)区间中闰年个数。第二行输出若干个正整数,按照......
  • P5736 【深基7.例2】质数筛
    1.题目介绍【深基7.例2】质数筛题目描述输入\(n\)个不大于\(10^5\)的正整数。要求全部储存在数组中,去除掉不是质数的数字,依次输出剩余的质数。输入格式第一行输入一个正整数\(n\),表示整数个数。第二行输入\(n\)个正整数\(a_i\),以空格隔开。输出格式输出一行,依次输......
  • 洛谷题单指南-排序-P1271 【深基9.例1】选举学生会
    原题链接:https://www.luogu.com.cn/problem/P1271题意解读:最直接的计数排序问题,借助一个桶h[N],对被投票的候选人x执行h[x]++,再按顺序遍历输出即可。100分代码:#include<bits/stdc++.h>usingnamespacestd;constintN=1005;inth[N];intmain(){intn,m;......
  • P5734 【深基6.例6】文字处理软件
    1.题目介绍【深基6.例6】文字处理软件题目描述你需要开发一款文字处理软件。最开始时输入一个字符串作为初始文档。可以认为文档开头是第\(0\)个字符。需要支持以下操作:1str:后接插入,在文档后面插入字符串\(\texttt{str}\),并输出文档的字符串;2ab:截取文档部分,只保留文档......