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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© canhotboy 中级黑马   /  2015-4-20 19:36  /  2206 人查看  /  18 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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


求思路。。。

18 个回复

倒序浏览
你需要算出从2006年1月1日到指定时间的天数,这个很麻烦,算完年的算月的最后算日的,都是用%做判断条件的
回复 使用道具 举报
第一步,定义一个函数判断是不是闰年;第二步,计算到2006年经过了多少天;第三步,用天数分别整除2和3.就是第二步难了点
回复 使用道具 举报
这个没有你想象中的这么难,因为2006.1.1就是一个最小值了,你输入的值,年份肯定不小于2006,月份也肯定小于1,日期也肯定不小于1.年份直接相减算出相差y年,月份直接想减算出相差m月,然后日期直接想减算出相差d天,在这相差的年份中遍历出有多少闰年,计数count次,在相差的月份中算出有多少个31天的大月,计数为t1,若月份跨度中出现2月,根据闰年情况减去2或者1,计数为t2,则计算的天数为:y*365+m*30+d+count+t1-t2
回复 使用道具 举报
闰年判断方法
int isLeapYear(int year) //是否是闰年
{
    if((year%100)==0)
    {
        if((year%4)==0)
        {
            return 1;
        }
        return 0;
    }
    else
    {
        if((year%4)==0)
        {
            return 1;
        }
        return 0;
    }
}
回复 使用道具 举报
:handshake
回复 使用道具 举报
这么好的帖子不顶就太对不起楼主了
回复 使用道具 举报
我喜欢,请大家鼓掌支持,谢谢
回复 使用道具 举报
谢谢楼主,好久没看到这么好的贴了
回复 使用道具 举报
木有思路
回复 使用道具 举报
明眼一看就想到要算天数,难就难在怎么确定多少天吧,常识也有,怎么样确实是不是闰年什么的,其实把步骤以划分感觉就不是那么难了
回复 使用道具 举报
:handshake
回复 使用道具 举报
一看到这种题果断懵了
回复 使用道具 举报
这个题超赞
回复 使用道具 举报
:victory::victory::victory::victory::victory::victory::victory::victory:
回复 使用道具 举报
[ 本帖最后由 卖报的小画家 于 2015-5-15 11:36 编辑 ]\n\n#include<stdio.h>

int leap(int a)
{
        if(a%4==0&&a%100!=0||a%400==0)  //判断闰年条件
                return 1;
        return 0;
}
int number(int year,int m,int d)  //计算输入日期距离2006.1.1共有多少天
{
        int sum=0,i,j,a[12]={31,28,31,30,31,30,31,31,30,31,30,31};
        int b[12]={31,29,31,30,31,30,31,31,30,31,30,31};
        if(leap(year)==1)
                for(i=0; i<m-1; i++)
                        sum+=b[i];
                else
                        for(i=0; i<m-1; i++)
                                sum+=a[i];
                        for(j=2006; j<year;j++)
                                if(leap(j)==1)
                                        sum+=366;
                                else
                                        sum+=365;
                                sum+=d;
                                return sum;
}

void main()
{
        int year,month,day,n;
        printf("请输入正确年月日\n");
        scanf("%d%d%d", &year,&month,&day);
        n=number(year,month,day);
        if((n%5)<4 && (n%5)>0)
                printf("%d:%d:%d 帅哥\n", year,month,day);
        else
                printf("%d:%d:%d 美女\n", year,month,day);
}
回复 使用道具 举报
卖报的小画家 发表于 2015-5-15 11:24
[ 本帖最后由 卖报的小画家 于 2015-5-15 11:36 编辑 ]\n\n#include

int leap(int a)

为啥要对 5求余,而不是3,或者2.
回复 使用道具 举报
看到这类问题头就有点大
回复 使用道具 举报
fixer 中级黑马 2015-5-24 00:15:22
19#
基本思路应该是%取余判断吧
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马