C语言解题:18岁生日
Posted 知道什么是码怪吗?
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言解题:18岁生日相关的知识,希望对你有一定的参考价值。
题目描述
小明的18岁生日就要到了,他当然很开心,可是他突然想到一个问题,是不是每个人从出生开始,到达18岁生日时所经过的天数都是一样的呢?似乎并不全都是这样,所以他想请你帮忙计算一下他和他的几个朋友从出生到达18岁生日所经过的总天数,让他好来比较一下。
输入
输入的第一行是一个数T,后面T行每行有一个日期,格式是YYYY-MM-DD。如我的生日是1988-03-07。
输出
T行,每行一个数,表示此人从出生到18岁生日所经过的天数。如果这个人没有18岁生日,就输出-1。
样例输入
1
1988-03-07
样例输出
6574
做题算法思路
(1)如果是在2月29日出生,必定没有18岁生日。
(2)分2月28日前出生和2月28日后出生两种情况讨论:①如果出生在2月28日之前,那么不管下一年是不是闰年,到下一年的同一天的天数只跟当前年是否是闰年有关。②如果出生在2月28日之后,到下一年的天数需要判断下一年是不是闰年再做决定。
参考代码
#include<stdio.h>
int main()
{
int count;//用于存储数据有几个出生日期
int number[200];//用于存储每个出生日期到18岁的天数
scanf("%d",&count);
for(int j=0;j<count;j++)
{
int year=0,month=0,day=0,allDay=0;
scanf("%d-%d-%d",&year,&month,&day);//按照格式接收数据
//如果是闰年的2月29日出生,那么必定没有18岁生日,天数设置为-1
if((year%400==0||(year%4==0&&year%100!=0))&&(month==2)&&(day==29))
{
number[j]=-1;
continue;//下面的代码就不执行了,进行下一次循环
}
//分2月28前后,2月28日之前不管下一年是不是闰年,到下一年同一天的天数只跟这一年有关
//如果在2月28日之后,还要判断下一年是不是闰年,从而改变加的天数
if((month==2&&day<=28)||month==1) //2月28日之前
{
for(int i=year;i<year+18;i++)
{
if(i%400==0||(i%4==0&&i%100!=0))//闰年天数加 1
allDay+=366;
else
allDay+=365;
}
}
if(month>2) //2月之后
{
for(int i=year+1;i<=year+18;i++)
{
if(i%400==0||(i%4==0&&i%100!=0))
allDay+=366;
else
allDay+=365;
}
}
number[j]=allDay;//将总天数赋值给number存放
}
for(int i=0;i<count;i++)//一起输出
printf("%d\\n",number[i]);
return 0;
}
以上是关于C语言解题:18岁生日的主要内容,如果未能解决你的问题,请参考以下文章