高斯日記c語言
『壹』 c語言 高斯日記 我的答案是1779-10-14 求大佬看下哪裡出錯 感謝啊 標准答案1779-7-16
這《高斯日記》的題目為什麼不貼出來呢?因為題目本身與程序是否正確是密切相關的啊!
正面就只能靠「猜測」來試了。
#include<stdio.h>
intifleapyear(intyear)
{if(year%4==0&&year%100!=0||year%400==0)return29;
elsereturn28;
}
intmain()
{intyear=1791,month=12,day=15;
intn=8113-5343;
intarray[13]={0,31,0,31,30,31,30,31,31,30,31,30,31};
printf("%d
",n);
while(1)
{day++;
if(day>array[month])
{month++;
day=1;
}
if(month==13)
{year++;
array[2]=ifleapyear(year);
month=1;
}
n--;
if(n==0)break;
}
printf("%d-%d-%d
",year,month,day);
return0;
}//1799-7-16
『貳』 c語言高斯日記
首先我們需要注意一下,題干中「高斯生日1777年4月30日的5343天後是1791年12月15日」,這里得出一個結論,高斯生日當天為第1天。
求高斯日記所標注的數字的年月日,可以自1777年4月30日起,累加「標注數字-1次」來得出結果。演算法的核心即實現日期累加。
#include<stdio.h>
intdpm[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};//每個月的天數
structymd{
intyear,month,day;
};
voidgaussBirthday(structymd*gbd){//定義高斯的生日
gbd->year=1777;
gbd->month=4;
gbd->day=30;
}
voidDate(structymd*a,structymd*b){
b->year=a->year;
b->month=a->month;
b->day=a->day;
}
intisLeap(intyear){
return(year%4==0&&year%100!=0)||year%400==0;
}
intprintDate(structymd*d){//列印日期控制個位數月、日前補0
printf("%d-",d->year);
if(d->month<10)
printf("0%d-",d->month);
else
printf("%d-",d->month);
if(d->day<10)
printf("0%d",d->day);
else
printf("%d",d->day);
printf(" ");
}
voiddate(structymd*gd,intday){//計算距離高斯生日第n天的日期
while(day-1){//自高斯生日起累加至日記標識數字-1
if(gd->month==12&&gd->day==dpm[12]){//年底處理
gd->year++;
gd->month=1;
gd->day=1;
}
elseif(gd->day>=dpm[gd->month]){//月底處理
if(isLeap(gd->year)&&gd->month==2&&gd->day!=29)//閏年2月底處理
gd->day++;
else{
gd->month++;
gd->day=1;
}
}
else
gd->day++;
day--;
}
}
intmain(void){
structymdgbd;//高斯生日
structymdgd;//高斯日記種標識的數字所代表的日期
intday;//高斯日記種標識的數字
gaussBirthday(&gbd);
Date(&gbd,&gd);
printf("請輸入高斯日記中標識的數字:");
scanf("%d",&day);
printf("====================================================== ");
date(&gd,day);
printDate(&gd);
return0;
}
執行結果
輸入題干已知的「5343」
輸出1791-12-15,以驗證演算法
『叄』 c語言演算法-高斯日記-根據天數計算日期-為什麼我總會多算出一天
注意啊 正確答案的演算法是 i<8113 實際算的是 1777年 4月30日 和博士學位日期之間隔了8112天 你的演算法也不算錯 可能和出題人的想法差了一點