黑马程序员技术交流社区
标题: C语言基础测试小明交际题如何化简 [打印本页]
作者: zhecipinle 时间: 2015-11-7 21:46
标题: C语言基础测试小明交际题如何化简
求助!自己写完代码总感觉累赘太多,而又不知道哪里能化简!
小明从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");
}
}
作者: 李凯666 时间: 2015-11-8 14:30
这个程序是蛮多内容的啊
作者: wwf707542865 时间: 2015-11-8 15:28
这个代码量也不大吧
作者: Morning_jcg 时间: 2015-11-8 16:58
http://bbs.itheima.com/thread-258401-1-1.html
这是我这题的帖子,可以和楼主探讨。
楼主是写的比较详细,而我就是就题论题,所以可能看上去比较短而已。
作者: zhecipinle 时间: 2015-11-8 20:22
恩 好的
作者: cherrycool 时间: 2015-11-8 23:24
小明的交际问题不会出现既不认识美女又不认识帅哥的情况,每三天认识一个美女,每两天认识一个帅哥,这就相当于除了0以外的自然数不是奇数就是偶数。从2006-1-1开始计算,2006-1-2认识的是帅哥,2006-1-3认识的就是美女。
作者: 伍陶陶 时间: 2015-11-9 15:46
好题好题!!!
作者: zhecipinle 时间: 2015-11-9 17:02
然而并没有呀,比如输入2006-1-5日,5正是2与3都无法整除的,所以他在这一天谁都没有认识
作者: chensc 时间: 2015-11-9 20:22
学习学习!
作者: 马尔代夫的日出 时间: 2015-11-25 22:05
不错,,,,,,,,,,,,,,,
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |