三天打鱼两天晒网

作者: 1墨家巨子 | 来源:发表于2019-08-19 19:35 被阅读0次

题目:

  中国有句俗语叫“三天打鱼两天晒网”。
  某人从1990年1月1日起开始“三天打鱼两天晒网”。
  问这个人在以后的某一天中是“打鱼”还是“晒网”?

解题思路:

   年:year    月:month     日:day 
   天数=(year-1990-1)闰年年数*366+非闰年年数*365+当前year已过的天数。    
   总天数除以5,若余数为1,2,3则为打鱼;0,4其余为晒网。

code:

int demo4 (void){
    int sum=0;
    int i;
    int c1=0,c2=0;
    int year=0,month=0,day=0;
    printf("请输入1990年1月1日起以后任意一个日期");
    scanf("%d %d %d",&year,&month,&day);
    int m1[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
    int m2[]={0,31,29,31,30,31,30,31,31,30,31,30,31};
    if(year>=1990&&month<=12&&day<=31){
        for(i=year;i>1990;i--){
            if(year%400==0||((year%4==0)&&(year%100!=0))){
                c1++;//记录已过闰年数
            }
            else c2++;//记录已过非闰年数
        }
        if(year%400==0||((year%4==0)&&(year%100!=0)))
{//当前年是闰年
            sum=c1*366+c2*365;
            for(i=0;i<month;i++){
                sum+=m2[i];
            }
            sum+=day;
        }
        else{//当前年不是闰年
            sum=c1*366+c2*365;
            for(i=0;i<month;i++){
                sum+=m1[i];
            }
            sum=sum+day;
        }

        switch (sum%5){
        case 0:printf("他在晒网"); break;
        case 1:printf("他在打鱼"); break;
        case 2:printf("他在打鱼"); break;
        case 3:printf("他在打鱼"); break;
        case 4:printf("他在晒网"); break;
        default:printf("err"); break;
        }
    }
    else printf("请输入大于1990年的年份或正确年月");
      return 0;
   }

fish.c

typedef struct date{
    int year;
    int month;
    int day;
}mydate;
int isLeapYear(mydate d){
    if(d.year%4==0&&d.year%100!=0||d.year%400==0)
        return 1;
    else
        return 0;
}
int getdays(mydate d){
    int sum=0;
    int i;
    int c1=0,c2=0;
    int m[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
    if(d.year>=1990&&d.month<=12&&d.day<=31){
        for(i=d.year;i>1990;i--){
            if(isLeapYear(d)){
                c1++;//记录闰年数
            }
            else c2++;//记录非闰年数
        }
        if(isLeapYear(d))
        {//当前年是闰年
            m[2]=29;
            sum=c1*366+c2*365;
            for(i=0;i<d.month;i++){
                sum+=m[i];
            }
            sum+=d.day;
        }//当前年不是闰年
        else{
            sum=c1*366+c2*365;
            for(i=0;i<d.month;i++){
                sum+=m[i];
            }
            sum+=d.day;
        }
  }
    return sum;
}
void text(void){
    while (1) {
        mydate d={1990,1,1};
        printf("请输入1990年1月1日以后任意一个日期\n");
        scanf("%d %d %d",&d.year,&d.month,&d.day);
        if(d.year==0){
           break;
        }
        else
           continue;
        if(d.year<1990||d.month>12||d.day>31||d.month<=0||d.day<=0){
           printf("请输入大于1990的年份或正确日期\n");
        }
        else{
        int sum=0;
        sum=getdays(d);
        switch (sum%5){
        case 0:printf("他在晒网\n"); break;
        case 1:printf("他在打鱼\n"); break;
        case 2:printf("他在打鱼\n"); break;
        case 3:printf("他在打鱼\n"); break;
        case 4:printf("他在晒网\n"); break;
        default:printf("err"); break;}
    }
  }
}

相关文章

  • 三天打鱼两天晒网

    .三天打鱼两天晒网 中国有句俗语叫“三天打鱼两天晒网”。某人从2010年1月1日起开始“三天打鱼两天晒网”,问这个...

  • 海豚与松鼠

    我可不能三天打鱼两天晒网

  • 三天打鱼两天晒网

    /*中国有句俗语叫“三天打鱼两天晒网”。 某人从1990年1月1日起开始“三天打鱼两天晒网”, 编写程序判断这个人...

  • 习字

    三天打鱼两天晒网,这字不会进步了!

  • 打鱼还是晒网

    问题描述 中国有句俗语叫“三天打鱼两天晒网”。某人从1990年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的...

  • 三天打鱼两天晒网也是一种进步

    三天打鱼两天晒网,也能取得巨大的成就,很多人不要侮辱它,自己根本连三天打鱼两天晒网都做不到。 如果英语的学习,每三...

  • 三天打鱼两天晒网,的人后来怎样了?

    一个三天打鱼两天晒网,的人后来怎样了?其实三天打鱼两天晒网的人 做事情,也可以做到坚持。就那我自己来说 ,我以前是...

  • 最好是更好的敌人

    日拱一卒远比三天打鱼两天晒网好

  • 心语

    三天打鱼两天晒网的写作看来是行不通的

  • 打鱼还是晒网

    1.问题描述. 中国有句俗语叫三天打鱼两天晒网。某人从1990年1月1日起开始三天打鱼两天晒网,问这个人以后的某一...

网友评论

    本文标题:三天打鱼两天晒网

    本文链接:https://www.haomeiwen.com/subject/jmwesctx.html