/*
需求:小明从2006年1月1日开始,每三天结识一个美女两天结识一个帅哥,
编程实现当输入2006年1月1日之后的任意一天,输出小明那天是结识美女还是帅哥(注意润年问题)(C语言)
思路:1,先算出任意一天据2006年,1月1日多少天。
1,算出差距年的总天数、
2.算出差距月的总天数
3.算出差距年月日的总天数。
2.利用%2与%3是否有余数判断结识的事美女还是帅哥。
*/
#include <stdio.h>
//所用到的三个函数的声明;
int getDays(int y, int m, int d);
void estimate(int days);
int isRun(int y);
int main()
{ //初始化年,月,日,用于接收输入键盘录入。
int year,month,day;
do
{
printf("请输入2006.1.1之后的任意一天,年月日之间以.隔开\n");
scanf("%d.%d.%d", &year, &month, &day);
} while (year<2006 || month<1 || month>12 ||day>31);
//调用函数getDays获得这天离2006年1月1日相差的天数。
int days=getDays(year, month, day);
//调用函数判断遇到的是美女还是帅哥。
estimate(days);
return 0;
}
int getDays(int y,int m,int d)
{
//闰年每月的天数
int leapYearMonths[12] = {31,29,31,30,31,30,31,31,30,31,30,31};
//正常年每月的天书
int yearMonths[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
//初始化一个月份差距的天数和,默认值为0。
int sumOfMonth=0;
//初始化一个年差距的天数和,默认值为0.
int sumOfYear=0;
//从2006年开始遍历,算出年差距的总天数。
for(int x=2006;x<y;x++)
{
if(isRun(x))
sumOfYear+=366;
else
sumOfYear+=365;
}
//从1月份算起,算出月差距的总天数。
for(int i=1;i<m;i++)
{
if(isRun(y))
sumOfMonth+=leapYearMonths[i];
else
sumOfMonth+=yearMonths[i];
}
//返回一个年月日差距的总天数。
return sumOfMonth+sumOfYear+d;
}
void estimate(int days)
{
//利用%的特性来判断是否遇见美女和帅哥。
if(days%2==0)
printf("这天小明碰到的是帅哥\n");
if(days%3==0)
printf("这天小明碰到的是美女\n");
if(days%2!=0 && days%3!=0)
printf("这天小明既没有碰到美女,也没有碰到帅哥");
}
//判断是否是闰年的函数。
int isRun(int y)
{
//闰年的计算是1,能被4整除,且不能被100整除,
// 2。能被400整除。两者满足其一即可。
if((y/4==0 && y/100!=0)||(y/400==0))
{
return 1;
}
else
{
return 0;
}
}
|
|