黑马程序员技术交流社区

标题: 基础测试题自我分析(六) [打印本页]

作者: Morning_jcg    时间: 2015-11-8 16:56
标题: 基础测试题自我分析(六)
/*********************************************************************************


以下为本人的基础测试题,所表答案为我的答案,分析也是自己的理解,如有不对,还望指正。


**********************************************************************************/
编程题6:
小明从2006年1月1日开始,每三天结识一个美女两天结识一个帅哥,编程实现当输入2006年1月1日之后的任意一天,输出小明那天是结识美女还是帅哥
我的源码:


  1. /*
  2. 小明从2006年1月1日开始,每三天结识一个美女两天结识一个帅哥,编程实现当输入2006年1月1日之后的任意一天,输出小明那天是结识美女还是帅哥
  3. */

  4. #include <stdio.h>



  5. int main(){
  6.         int n, y, r, day = 0, i;
  7.         scanf("%d年%d月%d日", &n, &y, &r);
  8.         day += (n - 2006) * 365 + (n - 2005) / 4;//一年一年加日子,有中间有几个闰年多加今天
  9.         for (i = 1; i < y; i++){//通过循环一个月一个月加日子
  10.                 switch (i){
  11.                 case 1:
  12.                 case 3:
  13.                 case 5:
  14.                 case 7:
  15.                 case 8:
  16.                 case 10:
  17.                         day += 31;
  18.                         break;
  19.                 case 4:
  20.                 case 6:
  21.                 case 9:
  22.                 case 11:
  23.                         day += 30;
  24.                         break;
  25.                 case 2:
  26.                         if (n % 4 == 0)//判断闰年二月
  27.                                 day += 29;
  28.                         else
  29.                                 day += 28;
  30.                         break;
  31.                 }
  32.         }
  33.         day += r;//一天一天加日子
  34.         if (day % 2 == 0){//两天一帅哥
  35.                 printf("帅哥 ");
  36.         }
  37.         if (day % 3 == 0){//三天一美女
  38.                 printf("美女 ");
  39.         }
  40.         printf("\n");
  41.         return 0;
  42. }
复制代码

这本身不是一道难题,但是是一道比较复杂,考验耐心和细心的题。

重点是要计算闰年,整一年的闰年是十分好解决的,多出的几个月里的日子计算需要耐心和细心。在考虑和计算的时候一定要小心多加一个月或者少加一个月,具体实现我是用过用循环一个一个月累加日子,避免计算错误。别的其实没什么大问题,细心就好了。



作者: 打滚的橘子    时间: 2015-11-8 19:58
一年一年加日子那里,后面(n-2005)/4,这里什么意思?如果表示闰年要多加一天,1、这里算式有错,2、按月份加日子的时候,闰月又加了一天。
而且题目不太清楚,比如今天是1号,从今天开始结实,是4号结识一个美女,6号结识一个帅哥,还是3号结识一个帅哥,4号结识一个美女?虽然看你的结果是属于后一种....这样就可能出现这一天既结识帅哥又结识美女。
作者: Morning_jcg    时间: 2015-11-8 21:25
打滚的橘子 发表于 2015-11-8 19:58
一年一年加日子那里,后面(n-2005)/4,这里什么意思?如果表示闰年要多加一天,1、这里算式有错,2、按月 ...

不对哟,你想,如果我输入的是2008年1月2日,答案是什么呢?虽然2008年是闰年,但是闰月还没有到,由于当年的月份我是放在后面计算的,所以实际上我计算的是2008年之前,也就是到2007年底的闰年数。题目的理解的话,我下载到的题目就是这么写的,我 是复制过来的,怎么理解,自圆其说就行,不用太在意。
作者: Morning_jcg    时间: 2015-11-8 21:28
本帖最后由 Morning_jcg 于 2015-11-8 21:38 编辑
打滚的橘子 发表于 2015-11-8 19:58
一年一年加日子那里,后面(n-2005)/4,这里什么意思?如果表示闰年要多加一天,1、这里算式有错,2、按月 ...

你可以拿我的程序去试试,应该日子是没算错的。你再仔细读读代码,我是把输入年之前的年份(由于都是整年,好算)先算掉的。
作者: gbl19920226    时间: 2015-11-9 10:23
好贴先收藏了,这题也一直在困扰我
作者: 李坤小太阳    时间: 2015-11-9 14:52
题目表述不清
作者: zhecipinle    时间: 2015-11-9 17:14
楼主的的代码清晰又明确,赞。但我觉的应该还有谁也没没有认识的情况呀?2天一帅哥,3天一美女的话,第5天和第13天这些无法被2和3整除的都输入谁都没认识的。
作者: 打滚的橘子    时间: 2015-11-9 21:03
Morning_jcg 发表于 2015-11-8 21:25
不对哟,你想,如果我输入的是2008年1月2日,答案是什么呢?虽然2008年是闰年,但是闰月还没有到,由于当 ...

哦,明白了。完了,基础测试题感觉好难啊,完全没想到用switch,培训班都进不了可怎么办{:2_33:}
作者: Morning_jcg    时间: 2015-11-9 21:27
打滚的橘子 发表于 2015-11-9 21:03
哦,明白了。完了,基础测试题感觉好难啊,完全没想到用switch,培训班都进不了可怎么办 ...

不会的吧,,
作者: Morning_jcg    时间: 2015-11-9 21:30
zhecipinle 发表于 2015-11-9 17:14
楼主的的代码清晰又明确,赞。但我觉的应该还有谁也没没有认识的情况呀?2天一帅哥,3天一美女的话,第5天 ...

嗯,谁都不认识的话我这里没做特殊处理,只是什么都不会输出而已。




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