//小明从2006年1月1日开始,每三天结识一个美女两天结识一个帅哥,编程实现当输入2006年1月1日之后的任意一天,输出小明那天是结识美女还是帅哥(注意润年问题) // 还是有BUG的,就是当用户输入2017,2,29时候不会抱错。。。大家可以交流一下
#include <stdio.h>
int runOrPing(int Y); int dayOfYear(int x); int dayOfMonth(int x, int y); void result(int sumDay);
int main(){
printf("请输入2006-1-1之后的任意一天,年、月、日以逗号隔开,形式如:“2014,3,23”\n");//提示用户输入日期 int x,y,z; scanf("%d,%d,%d",&x,&y,&z);//接受数据信息 if (x<2006||y>12||y<1||z>31) { printf("请输入有效日期"); }else {
int daySum=dayOfYear(x)+dayOfMonth(x, y)+z;//调用函数 result(daySum); }
return 0; }
int runOrPing(int Y){
if ((Y%400==0)||((Y%4==0)&&(Y%100!=0)))
{ return 1; }else return 0;//定义函数判断是否是闰年,如果是,返回值1;
}
int dayOfYear(int x){ //定义函数计算年份部分的日期
int count=0; for(int i=2006;i<=x;i++) { if(runOrPing(i)){ count++; }
}
return (x-count)*28+count*29+(x-2006)*337;
}
int dayOfMonth(int x, int y) //定义函数计算月部分的日期
{ char runMonth[]={31,29,31,30,31,30,31,31,30,31,30,31}; char pingMonth[]={31,28,31,30,31,30,31,31,30,31,30,31}; int sum=0; if(runOrPing(x)) {
for (int i=0;i<y-1;i++){ sum=sum+runMonth;
}
}else{ for (int i=0;i<y-1;i++){ sum=sum+pingMonth; } }
return sum; } void result(int sumDay){// 判断最后的结果。 if(sumDay%5<=3) { printf("今天小明见到的是美女!\n"); }else printf("今天小明见到的是帅哥!\n"); }
|