A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始


   求助!自己写完代码总感觉累赘太多,而又不知道哪里能化简!

   小明从2006年1月1日开始,每三天结识一个美女两天结识一个帅哥,编程实现当输入2006年1月1日之后的任意一天,输出小明那天是结识美女还是帅哥(注意润年问题)(C语言)




#include <stdio.h>
#define MON 12

int reYearModu(int y);
int leapTimeModu(int ye);
int curYearDayModu(int yea,int mon,int da,int a[],int b[]);
void resultModu(int d);

int main(int argc, const char * argv[]) {
    //定义年月日的变量
    int year,month,day;
    //定义闰年平年每月的天数
    int leapYearDay[MON] = {31,29,31,30,31,30,31,31,30,31,30,31};
    int commYearDay[MON] = {31,28,31,30,31,30,31,31,30,31,30,31};
    //提示用户输入信息
    printf("请输入2006年以后的日期(年月日之间用“-”隔开):");
    scanf("%d-%d-%d",&year,&month,&day);
    //验证用户输入
    if (year<2006||(month<1&&month>12)) {
        printf("输入的日期错误,请输入2006年1月1日以后的日期!\n");
        return 0;
    }
    //计算总共的天数=度过的年数*365+闰年多的1天*闰年次数+当年的天数
    int sumYear = year-2006;
    int leapTime = leapTimeModu(year);
    int curYearDay = curYearDayModu(year, month, day, &leapYearDay[MON], &commYearDay[MON]);
    int sumDay;
        if (sumYear!=2006) {
            sumDay = sumYear*365+leapTime+curYearDay;
        }else{
            sumDay = curYearDay;
        }
    //结算结果,并输出
    resultModu(sumDay);

    return 0;
}

//判断是否是闰年 1是 0不是
int reYearModu(int y){
    if ((y%4==0&&y%100!=0)||(y%400==0)) {
        return 1;
    }else
        return 0;
}
//已过闰年的次数
int leapTimeModu(int ye){
    int t = 0;
    //若为闰年则次数加1
    for (int i = 0; i<ye; i++) {
        if (reYearModu(ye)==1) {
            t++;
        }
    }
    return t;
}
//输入当前年的天数
int curYearDayModu(int yea,int mon,int da,int a[],int b[]){
    int d;
    //判断当月份不为1月时,将之前的月份的日子相加   为1月时直接使用输入日期的值
    if (mon!=1) {
        //判断闰年与平年
        if (reYearModu(yea)==1) {
            for (int i = 0; i<mon-1; i++) {
                d+=a;
            }
        }else{
            for (int i = 0; i<mon-1; i++) {
                d+=b;
            }
        }
        return d+da;
    }else{
        return da;
    }
}


//像用户输出结果
void resultModu(int d){

    if (d%2==0) {
        printf("小明今天认识了帅哥!\n");
    }
    if (d%3==0) {
        printf("小明今天认识了美女!\n");
    }
    if (d%2!=0&&d%3!=0) {
        printf("小明今天没认识帅哥也没认识美女!\n");
    }
}

9 个回复

正序浏览
不错,,,,,,,,,,,,,,,
回复 使用道具 举报
chensc 金牌黑马 2015-11-9 20:22:40
9#
学习学习!
回复 使用道具 举报
cherrycool 发表于 2015-11-8 23:24
小明的交际问题不会出现既不认识美女又不认识帅哥的情况,每三天认识一个美女,每两天认识一个帅哥,这就相 ...

然而并没有呀,比如输入2006-1-5日,5正是2与3都无法整除的,所以他在这一天谁都没有认识
回复 使用道具 举报
好题好题!!!
回复 使用道具 举报
小明的交际问题不会出现既不认识美女又不认识帅哥的情况,每三天认识一个美女,每两天认识一个帅哥,这就相当于除了0以外的自然数不是奇数就是偶数。从2006-1-1开始计算,2006-1-2认识的是帅哥,2006-1-3认识的就是美女。
回复 使用道具 举报
Morning_jcg 发表于 2015-11-8 16:58
http://bbs.itheima.com/thread-258401-1-1.html
这是我这题的帖子,可以和楼主探讨。
楼主是写的比较详细 ...

恩 好的
回复 使用道具 举报
http://bbs.itheima.com/thread-258401-1-1.html
这是我这题的帖子,可以和楼主探讨。
楼主是写的比较详细,而我就是就题论题,所以可能看上去比较短而已。
回复 使用道具 举报
这个代码量也不大吧
回复 使用道具 举报
这个程序是蛮多内容的啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马