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

3036803663

初级黑马

  • 黑马币:2

  • 帖子:6

  • 精华:0

© 3036803663 初级黑马   /  2015-10-31 13:42  /  7966 人查看  /  24 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

8黑马币
10、 小明从2006年1月1日开始,每三天结识一个美女两天结识一个帅哥,编程实现当输入2006年1月1日之后的任意一天,输出小明那天是结识美女还是帅哥(注意润年问题)(C语言)
(再给我解读一下这个题是什么意思,怎么感觉有歧义,能力有限求大神解答 分给的也够多了快来解答吧)

24 个回复

正序浏览
就是算年份的题目,然后就加点帅哥美女啥的。
回复 使用道具 举报
感觉两个事件是没有关联的,在2006年1月1日,过后两天也就是1月3日认识了一个帅哥,1月4日认识了一个美女,应该不是5天一个循环
回复 使用道具 举报
感觉看不懂的样子
回复 使用道具 举报
好多大神 膜拜一下
回复 使用道具 举报
都生猛啊
回复 使用道具 举报
好高大上的感觉
回复 使用道具 举报
如果是三天结合美女两天认识帅哥,那么就是5天一个循环,可以算出总天数,然后除余判断
回复 使用道具 举报
可以严肃点吗
回复 使用道具 举报
小明从2006年1月1日开始,每三天结识一个美女两天结识一
    个帅哥,编程实现当输入2006年1月1日之后的任意一天,输
    出小明那天是结识美女还是帅哥(注意润年问题)(C语言)
*/

#include <stdio.h>

    //声明函数
int getDays(int y, int m, int d);
int runYear(int y);
int jieShouData(int y, int m, int d);

    //定义数组用来存放闰年和非闰年每月的天数
int pingYearM[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int runYearM[12] = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};


int main(int argc, const char * argv[]) {
    //定义类型的变量
    //提示用户输入并接收日期
    //判断用户输入信息是否有误,如有提示用户重新输入
    int year, month, day;
    do {
        printf("亲耐滴,请输入2006 1 1 之后的日期,中间用空格隔开:\n");
        scanf("%d %d %d", &year, &month, &day);
    } while (jieShouData(year, month, day));
   
   
    //调用getDays函数,计算输入日期距离2006-1-1的总天数
    int allDays = getDays(year, month, day);
   
   
    //利用总天数计算小明某天是否结识帅哥美女
    //总天数能被2整除就结识帅哥
    //总天数能被3整除就结识美女
    //总天数如果不能被2和3整除,就不结识帅哥,也不结识美女
    if (allDays % 3 == 0)
        printf("我靠!小明今天结识了美女!\n");
    if (allDays % 2 == 0)
        printf("运气不错哦,小明今天结识帅哥!\n");
    if ((allDays % 2 != 0) && (allDays % 3 != 0))
        printf("不会吧?小明今天居然没有结识帅哥,也没有结识美女!\n");
    return 0;
}

    //定义函数计算输入日期距离2006-1-1的总天数
    //定义两个变量用来存储年份,月份相差的天数
    //如果是闰年,年份天数加上366不是加365
int getDays(int y, int m, int d)
{
    int yearDays = 0, monthDays = 0;
    for (int i = 2006; i < y; i++) {
        if (runYear(i))
            yearDays += 366;
        else
            yearDays += 365;
    }
    //计算输入月份与1月1日之间相差的天数
    //如果是闰年,就累加闰年所对应月份的天数
    //如果不是闰年,就累加非闰年所对应月份的天数
    for (int j = 1; j < m; j++) {
        if (runYear(y))
            monthDays += pingYearM[j-1];
        else
            monthDays += runYearM[j-1];
    }
    //计算总天数并返回
    int allDays = yearDays + monthDays +d;
    return allDays;
}
/*  新建一个函数用来判断是否是闰年
    1)非整百年能被4整除的为闰年
    2)整百年能被400整除的是闰年
*/
    //如果是闰年,返回1,否则返回0
int runYear(int y)
{
    if ( (y%4==0 && y%100!=0) || (y%400==0) )
        return 1;
    else
        return 0;
}

    //新建一个函数用来判断输入的日期是否合理,不合理返回1,合理返回0
    //如果年份小于2006、或月份小于1、或月份大于12、或日小于1,则日期不合理
    //如果是闰年
    //当天数大于当月所对应的最大天数,则不合理
int  jieShouData(int y, int m, int d)
{
    if (y<2006 || m<1 || m>12 || d<1)
        
        return 1;
        if (runYear(y))
        return d > runYearM[m-1];
    else
        return d > pingYearM[m-1];
}
回复 使用道具 举报
小明从2006年1月1日开始,每三天结识一个美女两天结识一
    个帅哥,编程实现当输入2006年1月1日之后的任意一天,输
    出小明那天是结识美女还是帅哥(注意润年问题)(C语言)
*/

#include <stdio.h>

    //声明函数
int getDays(int y, int m, int d);
int runYear(int y);
int jieShouData(int y, int m, int d);

    //定义数组用来存放闰年和非闰年每月的天数
int pingYearM[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int runYearM[12] = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};


int main(int argc, const char * argv[]) {
    //定义类型的变量
    //提示用户输入并接收日期
    //判断用户输入信息是否有误,如有提示用户重新输入
    int year, month, day;
    do {
        printf("亲耐滴,请输入2006 1 1 之后的日期,中间用空格隔开:\n");
        scanf("%d %d %d", &year, &month, &day);
    } while (jieShouData(year, month, day));
   
   
    //调用getDays函数,计算输入日期距离2006-1-1的总天数
    int allDays = getDays(year, month, day);
   
   
    //利用总天数计算小明某天是否结识帅哥美女
    //总天数能被2整除就结识帅哥
    //总天数能被3整除就结识美女
    //总天数如果不能被2和3整除,就不结识帅哥,也不结识美女
    if (allDays % 3 == 0)
        printf("我靠!小明今天结识了美女!\n");
    if (allDays % 2 == 0)
        printf("运气不错哦,小明今天结识帅哥!\n");
    if ((allDays % 2 != 0) && (allDays % 3 != 0))
        printf("不会吧?小明今天居然没有结识帅哥,也没有结识美女!\n");
    return 0;
}

    //定义函数计算输入日期距离2006-1-1的总天数
    //定义两个变量用来存储年份,月份相差的天数
    //如果是闰年,年份天数加上366不是加365
int getDays(int y, int m, int d)
{
    int yearDays = 0, monthDays = 0;
    for (int i = 2006; i < y; i++) {
        if (runYear(i))
            yearDays += 366;
        else
            yearDays += 365;
    }
    //计算输入月份与1月1日之间相差的天数
    //如果是闰年,就累加闰年所对应月份的天数
    //如果不是闰年,就累加非闰年所对应月份的天数
    for (int j = 1; j < m; j++) {
        if (runYear(y))
            monthDays += pingYearM[j-1];
        else
            monthDays += runYearM[j-1];
    }
    //计算总天数并返回
    int allDays = yearDays + monthDays +d;
    return allDays;
}
/*  新建一个函数用来判断是否是闰年
    1)非整百年能被4整除的为闰年
    2)整百年能被400整除的是闰年
*/
    //如果是闰年,返回1,否则返回0
int runYear(int y)
{
    if ( (y%4==0 && y%100!=0) || (y%400==0) )
        return 1;
    else
        return 0;
}

    //新建一个函数用来判断输入的日期是否合理,不合理返回1,合理返回0
    //如果年份小于2006、或月份小于1、或月份大于12、或日小于1,则日期不合理
    //如果是闰年
    //当天数大于当月所对应的最大天数,则不合理
int  jieShouData(int y, int m, int d)
{
    if (y<2006 || m<1 || m>12 || d<1)
        
        return 1;
        if (runYear(y))
        return d > runYearM[m-1];
    else
        return d > pingYearM[m-1];
}
回复 使用道具 举报
,我没想明白,只能默默的支持你一下!
回复 使用道具 举报
都是高手啊!自觉惭愧
回复 使用道具 举报
#include <stdio.h>  void test(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);          test(year, month, day);          return 0; }  void test(int y, int m, int d) {     int sumDaysOfYear = 0, sumDaysOfMonth = 0; // 年、月总天数          int sumDays; // 总天数          int minusYear = (y - 2006); // 计算相差的年数          // 计算相差年的总天数     for (int i = 0; i<minusYear; i++)     {         if ((2006+i)  % 4 ==0 && (2006+i) %100 != 0) // 当年份能被4整除又无法被100整除为闰年         {             sumDaysOfYear += 366;         }         else if ((2006+i) %400 ==0) // 当年份可以被400整除的为闰年         {             sumDaysOfYear += 366;         }         else         {             sumDaysOfYear += 365;         }              }          int leapYearMonths[12] = {31,29,31,30,31,30,31,31,30,31,30,31}; // 闰年的每月天数     int yearMonths[12] = {31,28,31,30,31,30,31,31,30,31,30,31}; // 一般年每月天数          // 计算相差月的天数     for (int j = 1; j < m; j++) // 这里1月份进不来     {         if (y % 4 ==0 && y %100 != 0) // 当年份能被4整除又无法被100整除,为闰年         {             sumDaysOfMonth+= leapYearMonths[j-1];         }         else if (y % 400 ==0) // 当年份可以被400整除的为闰年         {             sumDaysOfMonth+= leapYearMonths[j-1];         }         else         {             sumDaysOfMonth += yearMonths[j-1];         }              }          sumDays = sumDaysOfYear + sumDaysOfMonth +d; // 年月日的总天数          // 判断结识了什么人     if (sumDays %2 ==0)     {         printf("小明结识了帅哥\n");     }          if (sumDays %3 ==0)     {         printf("小明结识了美女\n");     }          if (sumDays %2 !=0 && sumDays %3 !=0)     {         printf("小明既没有结识美女也没有结识帅哥\n");     }      }
回复 使用道具 举报
好多大神
回复 使用道具 举报
我也刚做了这道题,下面是我的解答,希望对楼主有帮助

//小明从2006年1月1日开始,每三天结识一个美女两天结识一个帅哥,编程实现当输入2006年1月1日之后的任意一天,输出小明那天是结识美女还是帅哥(注意润年问题)
//计算 输入的日期 与2006年1月1日 相差几天
typedef struct{
    int year;
    int month;
    int day;
}Data;
//判断是否是闰年
int isLeapYear(int year)
{
    if((year%4==0&&year%100!=0)||year%400==0)
        return 1;
    else
        return 0;
}
//判断小明那天是结识美女还是帅哥
int meet_pg(int totaldays)
{
    if (totaldays%3==0) {
        return 1;
    }
    else
        return 0;
}
int meet_pb(int totaldays)
{
    if (totaldays%2==0) {
        return 1;
    }
    return 0;
}


int main(int argc, const char * argv[]) {
    printf("please enter your date,must be like this 2010 1 1");
    //处理输入日期错误。
    Data today;
    scanf("%d %d %d",&today.year,&today.month,&today.day);
    if (today.year<2006||today.month<1||today.month>12||today.day<1||today.day>31) {
        printf("Error:there is something wrong in your data");
        return 0;
    }
    if(today.month==2)
    {
        if (isLeapYear(today.year)) {
            if (today.month==2&&today.day>29) {
                printf("Error:leap year February only 28 days");
                return 0;
            }
            else
            {
                if (today.month==2&&today.day>28) {
                    printf("Error:leap year February only 28 days");
                    return 0;
                }
            }
        }
        else if (today.month==1||today.month==3||today.month==5||today.month==7||today.month==8||today.month==10||today.month==12) {
            if(today.day>31)
            {
                printf("Error:your data has wrong in day");
                return 0;
            }
        }else
        {
            if(today.day>30)
            {
                printf("Error:your data has wrong in day");
                return 0;
            }
        }
        
    }
    //计算相差日期。
    int totalDays=0;
    for (int year=2006; year<today.year; year++) {//计算年
        if (isLeapYear(year)) {
            totalDays+=366;
        }
        else{
            totalDays+=365;
        }
    }
   
    if (isLeapYear(today.year))//计算月
    {
        switch (today.month)
        {
            case 1:
                totalDays+=0;
                break;
            case 2:
                totalDays+=31;
                break;
            case 3:
                totalDays+=60;
                break;
            case 4:
                totalDays+=91;
                break;
            case 5:
                totalDays+=121;
                break;
            case 6:
                totalDays+=152;
                break;
            case 7:
                totalDays+=182;
                break;
            case 8:
                totalDays+=213;
                break;
            case 9:
                totalDays+=244;
                break;
            case 10:
                totalDays+=274;
                break;
            case 11:
                totalDays+=305;
                break;
            case 12:
                totalDays+=335;
                break;
        }
    }
    else
    {
        switch (today.month)
        {
            case 1:
                totalDays+=0;
                break;
            case 2:
                totalDays+=31;
                break;
            case 3:
                totalDays+=59;
                break;
            case 4:
                totalDays+=90;
                break;
            case 5:
                totalDays+=120;
                break;
            case 6:
                totalDays+=151;
                break;
            case 7:
                totalDays+=181;
                break;
            case 8:
                totalDays+=212;
                break;
            case 9:
                totalDays+=243;
                break;
            case 10:
                totalDays+=273;
                break;
            case 11:
                totalDays+=304;
                break;
            case 12:
                totalDays+=334;
                break;
        }
    }
    totalDays+=today.day-1;//计算日
    //printf("%d\n",totalDays);
    if (meet_pb(totalDays)) {
        printf("小明遇到了帅哥\n");
    }
    if (meet_pg(totalDays)) {
        printf("小明遇到了美女\n");
    }
    return 0;
   
}
回复 使用道具 举报
个人认为应该判断这一天是3的倍数还是2的倍数,若都是则都结识
回复 使用道具 举报
前排围观
回复 使用道具 举报
这个人是骗答案的。。。
回复 使用道具 举报
  1. #include <stdio.h>
  2. void selectMan(int year,int month,int day);
  3. int main(int argc, const char * argv[]) {
  4.     // insert code here...
  5.    
  6.     int year,month,day;
  7.    
  8.     printf("输入要查询的年月日按2006.1.1格式\n");
  9.     scanf("%d.%d.%d",&year,&month,&day);
  10.     selectMan(year, month, day);
  11.    
  12.    
  13.    
  14.     return 0;
  15. }
  16. void selectMan(int year,int month,int day)
  17. {
  18.     if(year<2006 || month<1 || month>12){
  19.         printf("输入错误");
  20.     }else
  21.     {
  22.         //year0是开始年
  23.         int year0 = 2006;
  24.         //numday 是一共多少天
  25.         int numday = 0;
  26.         //计算过了多少年,numyear为超过2006多少年
  27.         int numyear = year-year0;
  28.         //定义一个二维数组,区分闰年和平年的月累加的天
  29.         int months[2][13]={{0,31,28,31,30,31,30,31,31,30,31,30,31},
  30.                             {0,31,29,31,30,31,30,31,31,30,31,30,31}};
  31.         
  32.         while (numyear>0) {
  33.             //判断该年是否是闰年
  34.             if((year0/4==0&&year0/100!=0)||(year0/400==0)){
  35.                 //当前年的天数,闰年
  36.                 numday += 366;
  37.             }
  38.             else
  39.             {
  40.                 //当前年的天数,平年
  41.                 numday += 365;
  42.             }
  43.             //year0的值是加到多少年了
  44.             year0++;
  45.             //加一年需要减少一年长度
  46.             numyear--;
  47.         }
  48.         //加上每个月中闰年或者平年的天数
  49.         for(int i=0; i<month;i++){
  50.             if((year0/4==0&&year0/100!=0)||(year0/400==0))
  51.             {
  52.                 numday = numday + months[1][i];
  53.             }
  54.             else
  55.             {
  56.                 numday = numday + months[0][i];
  57.             }
  58.         }
  59.         
  60.         //算出总天数
  61.         numday = numday + day-1;
  62.         printf("一共过了%d天\n",numday);
  63.         //过三天认识一个美女,又过两天认识一个帅哥,所以5天一个循环
  64.         if(numday%5==3){
  65.             printf("小明认识的是美女\n");
  66.         }
  67.         else if(numday%5==0){
  68.             printf("小明认识的是帅哥\n");
  69.         }else{
  70.             printf("没有认识人\n");
  71.         }
  72.         
  73.         
  74.     }
  75. }
复制代码
这道是黑马基础考试题,我之前提交满分,这个是我的代码,注释很详细,你可以参考下。有问题我再解释。
回复 使用道具 举报
我去,被领先了
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马