黑马程序员技术交流社区

标题: 求思路 [打印本页]

作者: canhotboy    时间: 2015-4-20 19:36
标题: 求思路
小明从2006年1月1日开始,每三天结识一个美女两天结识一个帅哥,编程实现当输入2006年1月1日之后的任意一天,输出小明那天是结识美女还是帅哥(注意润年问题)(C语言)


求思路。。。

作者: 丶小千    时间: 2015-4-20 19:51
你需要算出从2006年1月1日到指定时间的天数,这个很麻烦,算完年的算月的最后算日的,都是用%做判断条件的
作者: 傲弛天下    时间: 2015-4-20 21:55
第一步,定义一个函数判断是不是闰年;第二步,计算到2006年经过了多少天;第三步,用天数分别整除2和3.就是第二步难了点
作者: lvzhehappy    时间: 2015-4-20 22:35
这个没有你想象中的这么难,因为2006.1.1就是一个最小值了,你输入的值,年份肯定不小于2006,月份也肯定小于1,日期也肯定不小于1.年份直接相减算出相差y年,月份直接想减算出相差m月,然后日期直接想减算出相差d天,在这相差的年份中遍历出有多少闰年,计数count次,在相差的月份中算出有多少个31天的大月,计数为t1,若月份跨度中出现2月,根据闰年情况减去2或者1,计数为t2,则计算的天数为:y*365+m*30+d+count+t1-t2
作者: lvzhehappy    时间: 2015-4-20 22:37
闰年判断方法
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;
    }
}
作者: canhotboy    时间: 2015-4-21 09:07
:handshake
作者: itheima_llt    时间: 2015-4-21 15:11
这么好的帖子不顶就太对不起楼主了
作者: itheima_llt    时间: 2015-4-21 20:44
我喜欢,请大家鼓掌支持,谢谢
作者: itheima_llt    时间: 2015-4-21 23:59
谢谢楼主,好久没看到这么好的贴了
作者: bibabo88    时间: 2015-4-22 00:05
木有思路
作者: wuwuwu    时间: 2015-4-22 00:26
明眼一看就想到要算天数,难就难在怎么确定多少天吧,常识也有,怎么样确实是不是闰年什么的,其实把步骤以划分感觉就不是那么难了
作者: canhotboy    时间: 2015-4-22 20:10
:handshake
作者: owlwgmt7    时间: 2015-4-22 20:20
一看到这种题果断懵了
作者: wwl0517    时间: 2015-5-15 09:48
这个题超赞
作者: 小小黑马很成器    时间: 2015-5-15 10:05
:victory::victory::victory::victory::victory::victory::victory::victory:
作者: 卖报的小画家    时间: 2015-5-15 11:24
[ 本帖最后由 卖报的小画家 于 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);
}

作者: zhangshuai    时间: 2015-5-23 06:57
卖报的小画家 发表于 2015-5-15 11:24
[ 本帖最后由 卖报的小画家 于 2015-5-15 11:36 编辑 ]\n\n#include

int leap(int a)

为啥要对 5求余,而不是3,或者2.
作者: hi虚无缥缈    时间: 2015-5-23 21:52
看到这类问题头就有点大
作者: fixer    时间: 2015-5-24 00:15
基本思路应该是%取余判断吧




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