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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© legendary 中级黑马   /  2014-7-18 23:49  /  4817 人查看  /  27 人回复  /   2 人收藏 转载请遵从CC协议 禁止商业使用本文

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

27 个回复

正序浏览
我也抽到了这道题,好好看看思考下,再来看你们的讲解
回复 使用道具 举报
厉害!!!!!!!!!!!
回复 使用道具 举报
加油 加油
回复 使用道具 举报
dui 还有BUg
回复 使用道具 举报
//小明从2006年1月1日开始,每三天结识一个美女两天结识一个帅哥,编程实现当输入2006年1月1日之后的任意一天,输出小明那天是结识美女还是帅哥(注意润年问题)
#include <stdio.h>

int runOrPing(int Y){
   
    if ((Y%400==0)||((Y%4==0)&&(Y%100!=0)))
        
        {
            return 1;
        }else  return 0;
   
}
        
int dayOfYear(int x){
   
    int count=0;
    for(int i=2006;i<=x;i++)
    {
        if(runOrPing(i)){
            count++;
    }
        
        }
        
    return (x-count)*28+count*29+(x-2006)*337;
   
    }
        
int dayOfMonth(int x, int y)
   
        {
            char runMonth[]={31,29,31,30,31,30,31,31,30,31,30,31};
            char pingMonth[]={31,28,31,30,31,30,31,31,30,31,30,31};
            int sum=0;
            if(runOrPing(x)) {
               
                for (int i=0;i<y-1;i++){
                    sum=sum+runMonth[i];
                    
                }
               
            }else{
                for (int i=0;i<y-1;i++){
                    sum=sum+pingMonth[i];
}
            }
            
            return sum;
        }
void result(int sumDay){
            if(sumDay%5<=3)
            {
                printf("今天小明见到的是美女!\n");
            }else
                printf("今天小明见到的是帅哥!\n");
        }
        

int main(){
   
    printf("请输入年、月、日,并以逗号隔开,形式如:“2014,3,23”\n");
    int x,y,z;
    scanf("%d,%d,%d",&x,&y,&z);
   
   int daySum=dayOfYear(x)+dayOfMonth(x, y)+z;
    result(daySum);
   
    return 0;
}
回复 使用道具 举报
好厉害~~~~~
回复 使用道具 举报
加上了判断日期是否合理问题
回复 使用道具 举报
FTD 中级黑马 2015-10-11 20:16:42
21#
这题的精髓在于年月日的计算,在计算某年某月有多少天的基础上又进行了升华,我觉得是一道很值得思考的题!学到了!
回复 使用道具 举报

这样编写不是特别严谨 例如输入“2008-2-31”会显示“小明结识了美女 小明结识了帅哥”但是2月根本没有31日这天
回复 使用道具 举报
此生逍遥 发表于 2014-9-17 23:34
算出总天数除以3,能被3整除结识美女,能被2整除就结识帅哥,能被6整除既结识美女又结识帅哥。 ...

我考,我抽到的就是这道题!
回复 使用道具 举报
爱情路13号 发表于 2014-7-19 00:10
楼主千万不要直接抄写,自己要做一定的修改。思路都已经给你了

那个年月日 用结构体也可以把
回复 使用道具 举报
学习了,很好的帖子
回复 使用道具 举报
chaoren 发表于 2015-3-4 16:30
楼主,这题我是这样做的。我也刚做了那个测试,希望咱们一起交流,下面我贴上我的代码。
#include
void  ...

我的思路是想判断年,隔一年的话,加上整年的天数。用一个循环体,设置一个变量标记年份,每循环一次,标记+1;这其中就有判断平年和闰年,我也是设置了一个变量来标记,因为2006年是平年,2008年是闰年,每四年一润,所以我就设置闰年标记初始值为2.年循环完了再比较月份,同样设置一个变量标记月份,每个月加不同的天数,最后在进入天数比较时,说明已经的同年同月了,同样的思想。即可获得相差的天数
回复 使用道具 举报

楼主,这题我是这样做的。我也刚做了那个测试,希望咱们一起交流,下面我贴上我的代码。
#include <stdio.h>
void putout(int y, int m, int d);//声明一个函数
int main()
{
    int year ;
    int month;
    int day;
    do
    {                                                                                                      /*****************************************/
        printf("请输入2006-1-1之后的任意一天,年月日之间以-隔开\n"); /****当输入的年月日不合法时,重复提示****/
        scanf("%d-%d-%d", &year, &month, &day);                             /****************************************/
    } while (year<2006 || month<1 || month>12);
    //将合法的年月日作为形参调用putout函数
    putout(year, month, day);
   
    return 0;
}
void putout(int y, int m, int d)
{
int ytempt=2006;//定义一个变量来标记年份
int mtempt=1;//定义一个变量来标记月份
int dtempt=1;//定义一个变量来标记天
int sum=0;//定义一个变量来保存总天数
int i=2;//平年闰年标记
while (ytempt<y) {//当年份标记小于输入的年份时执行下面循环体
  if(i%4) sum+=365;//因为2006年是平年,2008年是闰年,所以定义i初始值为2来标记平年闰年,如果i不能被4整除,总天数在原有基础上+365
  else sum+=366;//如果是闰年则+366
  ytempt++;//进入下一年
  i++;//闰年标记+1
}
//当条件不满足时进入月份判断
while (mtempt<m){//如果标记月份小于输入的月份,则进入下面循环体
if(mtempt==1||mtempt==3||mtempt==5||mtempt==7||mtempt==8||mtempt==10) sum+=31;//一三五七八十腊,三十一天永不差,m最大值为12,所以mtempt=12不会执行这一句
if(mtempt==2){//标记月份来到二月份
if(i%4) sum+=28;//平月天数+28;
else sum+=29;//闰月天数+29
}
else sum+=30;//其他月份天数+30
mtempt++;//月份标记加1;
}
//年,月都比较运算完后进入日期判断
while (dtempt<d) {//如果日期标记小于输入的日期
  sum++;//天数加1;
  dtempt++;//日期标记+1;进入下一天。
}
// printf("sum=%d\n",sum);
if(sum%2==0){//小明每隔两天认识一个帅哥
printf("小明认识了帅哥\n");
}
if(sum%3==0){//小明每隔三天认识一个美女
printf("小明认识了美女\n");
}
if(sum%3&&sum%2){
printf("小明即没认识了美女,也没认识帅哥\n");
}
}

回复 使用道具 举报
这个程序,关键在天数的运算上,而天数的运算我能想到的,有两种思路,一个是闰年和平年只有二月不一样,二月单算,另一种思路是闰年和平年整体不一样 整体单独计算。
回复 使用道具 举报 1 0
万雷 高级黑马 2014-10-12 11:37:50
13#
爱情路13号 发表于 2014-7-19 00:09
楼主做的是基础测试么,如果是基础测试建议楼主把我的代码更改一下,前面的时间就不要用数组来表示了,直接 ...

您 这个 程序是有点小问题的,怎么都运行不出来,说是语法错误,我检查了好几遍,也没发现,求高手指点迷津
回复 使用道具 举报
算出总天数除以3,能被3整除结识美女,能被2整除就结识帅哥,能被6整除既结识美女又结识帅哥。
回复 使用道具 举报
牛啊,以前学过吧,进几期的
回复 使用道具 举报
点个赞吧,又见高手了
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马