#import <Foundation/Foundation.h>
/*
小明从2006年1月1日开始,每三天结识一个美女两天结识一个帅哥,编程实现当输入2006年1月1日之后的任意一天,输出小明那天是结识美女还是帅哥(注意润年问题)(C语言)
1.求给定年月日距离公元元年多少天(含当日)
2.求2006年1月1日距离公元元年多少天(含当日)
3.用1.的结果 与 2.的结果 求差
4.将求差结果模5,结果得3就结识美女,得0就认识帅哥
5.将结果从控制台打印
*/
#include <stdio.h>
void getKnown (int year,int month,int day) {
// 定义月份变量 二月初始值为0
int Jan= 31,Feb= 0,Mar= 31,Apr= 30,May= 31,Jun= 30,Jul= 31,Aug= 31,Sep= 30,Oct= 31,Nov= 30,Dec= 31,Year= 0;
int sumY= 0,sumM= 0,count= 0;
// 判断 闰年366天 非闰365天,判断 闰月29天 非闰28天
for (int i= 0; i < year; i++) {
if (year % 400 == 0 || (year % 4 == 0 && year %100 != 0)) { //遍历年份 做年份的天数累加 含本年
Year= 366;Feb = 29;
} else {
Year= 365;Feb = 28;
}
sumY += Year;
}
// 用月份构造数组
int arr[12] = {Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec};
//遍历月份 做月份累加运算 不含本月
for (int i= 1; i != month; i++) {
sumM += arr[i-1];
}
// 该日期距离2006年1月1日 count 天,含有当日
count = sumY + sumM + day + 1 - 732191; // 2006年1月1日距离公元元年的第732191天!
//模运算,因为5天是一个循环
if(3 == count % 5) {
printf("小明结识的是美女\n");
} else if(0 == count % 5) {
printf("小明结识的是帅哥\n");
} else {
printf("小明既没结识美女,也没结识帅哥\n");
}
}
int main() {
// insert code here...
//getKnown(2006, 1, 5);
getKnown(2015, 11, 15);
printf("The end!\n");
return 0;
} |
|