黑马程序员技术交流社区

标题: 小明从2006年1月1日开始,每三天结识一个美女两天结识一... [打印本页]

作者: linexs    时间: 2015-11-18 23:03
标题: 小明从2006年1月1日开始,每三天结识一个美女两天结识一...

#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;
}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2