//小明从2006年1月1日开始,每三天结识一个美女两天结识一个帅哥,编程实现当输入2006年1月1日之后的任意一天,输出小明那天是结识美女还是帅哥(注意润年问题)
//计算 输入的日期 与2006年1月1日 相差几天
typedef struct{
int year;
int month;
int day;
}Data;
//判断是否是闰年
int isLeapYear(int year)
{
if((year%4==0&&year%100!=0)||year%400==0)
return 1;
else
return 0;
}
//判断小明那天是结识美女还是帅哥
int meet_pg(int totaldays)
{
if (totaldays%3==0) {
return 1;
}
else
return 0;
}
int meet_pb(int totaldays)
{
if (totaldays%2==0) {
return 1;
}
return 0;
}
int main(int argc, const char * argv[]) {
printf("please enter your date,must be like this 2010 1 1");
//处理输入日期错误。
Data today;
scanf("%d %d %d",&today.year,&today.month,&today.day);
if (today.year<2006||today.month<1||today.month>12||today.day<1||today.day>31) {
printf("Error:there is something wrong in your data");
return 0;
}
if(today.month==2)
{
if (isLeapYear(today.year)) {
if (today.month==2&&today.day>29) {
printf("Error:leap year February only 28 days");
return 0;
}
else
{
if (today.month==2&&today.day>28) {
printf("Error:leap year February only 28 days");
return 0;
}
}
}
else if (today.month==1||today.month==3||today.month==5||today.month==7||today.month==8||today.month==10||today.month==12) {
if(today.day>31)
{
printf("Error:your data has wrong in day");
return 0;
}
}else
{
if(today.day>30)
{
printf("Error:your data has wrong in day");
return 0;
}
}
}
//计算相差日期。
int totalDays=0;
for (int year=2006; year<today.year; year++) {//计算年
if (isLeapYear(year)) {
totalDays+=366;
}
else{
totalDays+=365;
}
}
if (isLeapYear(today.year))//计算月
{
switch (today.month)
{
case 1:
totalDays+=0;
break;
case 2:
totalDays+=31;
break;
case 3:
totalDays+=60;
break;
case 4:
totalDays+=91;
break;
case 5:
totalDays+=121;
break;
case 6:
totalDays+=152;
break;
case 7:
totalDays+=182;
break;
case 8:
totalDays+=213;
break;
case 9:
totalDays+=244;
break;
case 10:
totalDays+=274;
break;
case 11:
totalDays+=305;
break;
case 12:
totalDays+=335;
break;
}
}
else
{
switch (today.month)
{
case 1:
totalDays+=0;
break;
case 2:
totalDays+=31;
break;
case 3:
totalDays+=59;
break;
case 4:
totalDays+=90;
break;
case 5:
totalDays+=120;
break;
case 6:
totalDays+=151;
break;
case 7:
totalDays+=181;
break;
case 8:
totalDays+=212;
break;
case 9:
totalDays+=243;
break;
case 10:
totalDays+=273;
break;
case 11:
totalDays+=304;
break;
case 12:
totalDays+=334;
break;
}
}
totalDays+=today.day-1;//计算日
//printf("%d\n",totalDays);
if (meet_pb(totalDays)) {
printf("小明遇到了帅哥\n");
}
if (meet_pg(totalDays)) {
printf("小明遇到了美女\n");
}
return 0;
}作者: fengjiequlada 时间: 2015-11-5 00:10
好多大神作者: dayforce 时间: 2015-11-5 20:21
#include <stdio.h> void test(int y, int m, int d); int main() { int year ; int month; int day; do { printf("请输入2006-1-1之后的任意一天,年月日之间以-隔开\n"); scanf("%d-%d-%d", &year, &month, &day); } while (year<2006 || month<1 || month>12); test(year, month, day); return 0; } void test(int y, int m, int d) { int sumDaysOfYear = 0, sumDaysOfMonth = 0; // 年、月总天数 int sumDays; // 总天数 int minusYear = (y - 2006); // 计算相差的年数 // 计算相差年的总天数 for (int i = 0; i<minusYear; i++) { if ((2006+i) % 4 ==0 && (2006+i) %100 != 0) // 当年份能被4整除又无法被100整除为闰年 { sumDaysOfYear += 366; } else if ((2006+i) %400 ==0) // 当年份可以被400整除的为闰年 { sumDaysOfYear += 366; } else { sumDaysOfYear += 365; } } 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}; // 一般年每月天数 // 计算相差月的天数 for (int j = 1; j < m; j++) // 这里1月份进不来 { if (y % 4 ==0 && y %100 != 0) // 当年份能被4整除又无法被100整除,为闰年 { sumDaysOfMonth+= leapYearMonths[j-1]; } else if (y % 400 ==0) // 当年份可以被400整除的为闰年 { sumDaysOfMonth+= leapYearMonths[j-1]; } else { sumDaysOfMonth += yearMonths[j-1]; } } sumDays = sumDaysOfYear + sumDaysOfMonth +d; // 年月日的总天数 // 判断结识了什么人 if (sumDays %2 ==0) { printf("小明结识了帅哥\n"); } if (sumDays %3 ==0) { printf("小明结识了美女\n"); } if (sumDays %2 !=0 && sumDays %3 !=0) { printf("小明既没有结识美女也没有结识帅哥\n"); } }作者: 会长大的小牛 时间: 2015-11-6 21:30
都是高手啊!自觉惭愧作者: 2235510 时间: 2015-11-9 22:36
,我没想明白,只能默默的支持你一下!作者: guobao717 时间: 2015-11-9 23:48
小明从2006年1月1日开始,每三天结识一个美女两天结识一
个帅哥,编程实现当输入2006年1月1日之后的任意一天,输
出小明那天是结识美女还是帅哥(注意润年问题)(C语言)
*/
#include <stdio.h>
//声明函数
int getDays(int y, int m, int d);
int runYear(int y);
int jieShouData(int y, int m, int d);
//定义函数计算输入日期距离2006-1-1的总天数
//定义两个变量用来存储年份,月份相差的天数
//如果是闰年,年份天数加上366不是加365
int getDays(int y, int m, int d)
{
int yearDays = 0, monthDays = 0;
for (int i = 2006; i < y; i++) {
if (runYear(i))
yearDays += 366;
else
yearDays += 365;
}
//计算输入月份与1月1日之间相差的天数
//如果是闰年,就累加闰年所对应月份的天数
//如果不是闰年,就累加非闰年所对应月份的天数
for (int j = 1; j < m; j++) {
if (runYear(y))
monthDays += pingYearM[j-1];
else
monthDays += runYearM[j-1];
}
//计算总天数并返回
int allDays = yearDays + monthDays +d;
return allDays;
}
/* 新建一个函数用来判断是否是闰年
1)非整百年能被4整除的为闰年
2)整百年能被400整除的是闰年
*/
//如果是闰年,返回1,否则返回0
int runYear(int y)
{
if ( (y%4==0 && y%100!=0) || (y%400==0) )
return 1;
else
return 0;
}
//新建一个函数用来判断输入的日期是否合理,不合理返回1,合理返回0
//如果年份小于2006、或月份小于1、或月份大于12、或日小于1,则日期不合理
//如果是闰年
//当天数大于当月所对应的最大天数,则不合理
int jieShouData(int y, int m, int d)
{
if (y<2006 || m<1 || m>12 || d<1)
return 1;
if (runYear(y))
return d > runYearM[m-1];
else
return d > pingYearM[m-1];
}作者: guobao717 时间: 2015-11-9 23:49
小明从2006年1月1日开始,每三天结识一个美女两天结识一
个帅哥,编程实现当输入2006年1月1日之后的任意一天,输
出小明那天是结识美女还是帅哥(注意润年问题)(C语言)
*/
#include <stdio.h>
//声明函数
int getDays(int y, int m, int d);
int runYear(int y);
int jieShouData(int y, int m, int d);
//定义函数计算输入日期距离2006-1-1的总天数
//定义两个变量用来存储年份,月份相差的天数
//如果是闰年,年份天数加上366不是加365
int getDays(int y, int m, int d)
{
int yearDays = 0, monthDays = 0;
for (int i = 2006; i < y; i++) {
if (runYear(i))
yearDays += 366;
else
yearDays += 365;
}
//计算输入月份与1月1日之间相差的天数
//如果是闰年,就累加闰年所对应月份的天数
//如果不是闰年,就累加非闰年所对应月份的天数
for (int j = 1; j < m; j++) {
if (runYear(y))
monthDays += pingYearM[j-1];
else
monthDays += runYearM[j-1];
}
//计算总天数并返回
int allDays = yearDays + monthDays +d;
return allDays;
}
/* 新建一个函数用来判断是否是闰年
1)非整百年能被4整除的为闰年
2)整百年能被400整除的是闰年
*/
//如果是闰年,返回1,否则返回0
int runYear(int y)
{
if ( (y%4==0 && y%100!=0) || (y%400==0) )
return 1;
else
return 0;
}
//新建一个函数用来判断输入的日期是否合理,不合理返回1,合理返回0
//如果年份小于2006、或月份小于1、或月份大于12、或日小于1,则日期不合理
//如果是闰年
//当天数大于当月所对应的最大天数,则不合理
int jieShouData(int y, int m, int d)
{
if (y<2006 || m<1 || m>12 || d<1)