C语言C语言&嵌入式

三天打鱼两天晒网

2019-08-19  本文已影响0人  1墨家巨子

题目:

  中国有句俗语叫“三天打鱼两天晒网”。
  某人从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;}
    }
  }
}
上一篇 下一篇

猜你喜欢

热点阅读