有这样的日期吗? (单测试用例版)

题目来源:http://pts.hunau.edu.cn/problem.php?cid=2659&pid=9

最近帮人做题目,在csdn上看到有一个多测试版本,因为数组还没学,所以无法利用,而且也想在csdn上发篇文章试试,于是便拿来练手了。

输入
每行有三个小于10000的正整数y,m,d,表示一个日期的年月日。

输出
如果该日期是合乎历法的则输出yes,否则输出no。

输入样例:

 2000 2 292001 6 312001 12 312001 11 3120000 2 21

输出样例:

no
no
yes
no
no

解析:主要在于闰年,大小月(7、8月变换),二月的处理。

** 闰年规则:四年一闰,百年不闰,四百年再闰:链接。例如:2000年是闰年,2100年则是平年

处理

对于年year,月month,日day;
先判断年,月,日单个是否合法
然后对把y除4取余赋值给a:a=y%4;
把月份m除2取余赋值给c: c=m%2;
因为m在7、8月有变化,相当于跨了一个月,
于是我用:if(m>=8){c=(c+1)%2;}来处理c
则if(m==2)(解决2月的特殊情况),else if 解决其他月份。

注:m>8月的处理应该在其他月份处理之前就要做。

二月特殊情况:

if(m==2){if(a==0){a=y%400,b=y%100;if(a!=0&&b==0&&d>=29){printf("no");}else {if(d<=29){printf("yes");}else{printf("no");}}}else if(d<29) {printf("yes");}else{printf("no");} }

其他月份:

     else if(c==0)  {if(d<=30) printf("yes");else printf("no");}else if(c==1)  {if(d<=31) printf("yes");else printf("no");}

代码如下(式中的y,m,d表示年月日):

#include <stdio.h>
#include<math.h>
int main (){int y,m,d;int a,b,c;scanf("%d %d %d",&y,&m,&d);a=y%4;c=m%2;if(y>0&&y<=10000&&m>0&&m<=12&&d>0&&d<=31){if(m>=8){c=(c+1)%2;}if(m==2){if(a==0){a=y%400,b=y%100;if(a!=0&&b==0&&d>=29){printf("no");}else {if(d<=29){printf("yes");}else{printf("no");}}}else if(d<29) {printf("yes");}else{printf("no");} }else if(c==0)  {if(d<=30) printf("yes");else printf("no");}else if(c==1)  {if(d<=31) printf("yes");else printf("no");}}elseprintf("no");return 0;
}

好了 ,以上就是全部内容了,感谢观看。

关于c语言如何判断日期是否合法?\\有这样的日期吗?相关推荐

  1. java 日期是否合法_java 中 Date 类型快判断日期是否合法.

    // 如果日期不合法,则抛异常try {String date_str = 5555-22-33;SimpleDateFormat format=new SimpleDateFormat(yyyy-M ...

  2. JAVA判断输入日期是否合法

    简单判断输入日期是否合法 运行结果: public class JudgeDate {public static boolean judge(int y,int m,int d) {boolean p ...

  3. 判断日期是否合法(Java精练版)

    判断日期经常合法出现在IO场景下,下面将使用简练的思路和代码呈现给大伙! 实现思路: 1.声明并初始化一个整型数组,表示各个月中最大的天数,数组长度刚好为12(注意:该数组在平年条件下使用) 2.定义 ...

  4. c语言switch判断星座,通过日期计算星座 - osc_d41sfzmu的个人空间 - OSCHINA - 中文开源技术交流社区...

    分析和理解根据日期计算星座函数 起始月份 号数 星座 结束月份 号数 时间区间 12 22 摩羯座 1 19 12/22 - 1/19 1 20 水瓶座 2 18 1/20 - 2/18 2 19 双 ...

  5. Oracle数据库:约束行限制where语句,判断条件,比较条件,字符串日期格式,in,like,escape,null语句

    Oracle数据库:约束行限制where语句,判断条件,比较条件,字符串日期格式,in,like,escape,null语句 2022找工作是学历.能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很 ...

  6. 正则表达式在JS中的应用,判断邮箱是否合法

    目录 一.什么是正则表达式: 二.正则表达式基本符号: 三.简单的正则表达式: 四.创建正则表达式,调用方法: 五.例子:判断邮箱是否合法 一.什么是正则表达式: 正则表达式主要用在字符串格式匹配方面 ...

  7. c语言判断非法字符题目,C语言考试题库之判断题-c语言考试判断题

    <C语言考试题库之判断题-c语言考试判断题>由会员分享,可在线阅读,更多相关<C语言考试题库之判断题-c语言考试判断题(7页珍藏版)>请在人人文库网上搜索. 1.三.判断题(1 ...

  8. 如何判断一个字符串是否为数字或日期?

    如何判断一个字符串是否为数字或日期? 作者: eygle | English Version  [转载时请以超链接形式标明文章 出处和作者信息及 本声明] 链接: http://www.eygle.c ...

  9. R语言基于日期范围筛选数据实战(Subset by a Date Range):日期范围之内的数据、日期范围之外的数据、日期之后的数据、日期之前的数据

    R语言基于日期范围筛选数据实战(Subset by a Date Range):日期范围之内的数据.日期范围之外的数据.日期之后的数据.日期之前的数据 目录 R语言基于日期范围筛选数据实战(Subse ...

  10. linux检查socekt是否断开,如何在C语言中判断socket是否已经断开

    如果不主动关闭socket的话,系统不会自动关闭的,除非当前进程挂掉了,操作系统把占用的socket回收了才会关闭.小编今天跟大家简单介绍下如何在C语言中判断socket是否已经断开 下面来介绍判断非 ...

最新文章

  1. CoRL 2020奖项公布,斯坦福获最佳论文奖,华为等摘得最佳系统论文奖
  2. 在物理机上用u盘安装linux遇到的问题
  3. 烂泥:centos单独编译安装gd库
  4. Rumor CodeForces - 893C
  5. 网络知识:路由器要不要每天重启?很多人都做错了,难怪网速慢
  6. 05-类--+-号使用
  7. 票务系统开发_景区票务系统部署到底是SaaS还是本地化呢?
  8. pagePiling.js - 创建美丽的全屏滚动效果
  9. 第一次接触WebSocket遇到的坑以及感受
  10. B2B电商平台--ChinaPay银联电子支付功能
  11. oracle减法函数mius_Oracle常用函数及其用法
  12. 单片机(嵌入式)程序分层架构
  13. c 陷阱与缺陷 摘录
  14. STM32F103 GPIOA->CRL=0XFFF0FFFF配置端口方向
  15. java小游戏——飞翔的小鸟(java初学作品)
  16. 从希望中寻找失望——计算机达人成长之路(8)连载
  17. 给B2C网站企业的一点建议
  18. Kinect开发(二)——注意项点,影像显示
  19. P4 类,对象,类成员简介
  20. WayOS路由器电信网通双线的设置方法

热门文章

  1. IT企业职业道德的反思
  2. Python官网主页改版 http://www.python.org/
  3. 山东大学密码学引论复习重点总结与期末试题
  4. CharacterUtils 判断中英文,英文大小写
  5. JAVA 面试知识点(个人总结)
  6. 如何高效的进行空值的填充
  7. 环信IM即时通讯集成-遇到问题及创建默认会话+默认欢迎语
  8. Android开发-基本概念小整理(二)为了面试的小伙伴们所准备~~
  9. 超融合的网络bond和bridge模式。kvm+bond+bridge
  10. 什么?一个核同时执行两个线程?