c語言上機扯蛋的母牛(n種演算法更新中)
來源:互聯網
上載者:User
有一頭母牛,它每年初生一頭小母牛,每頭小母牛從第4年起,每年年初也生一頭小母牛.問在第20年時,牛的頭數共有多少? 問題有分歧 每頭小母牛從第4年起,每年年初也生一頭小母牛. 若結果為九百多頭,則是每頭小母牛從第4年起,第五年年初才開始生小牛 若結果為兩千多頭,則是每頭小母牛從第4年起,第四年年初就開始生小牛 我覺得 我個人理解為後者(屬於語文問題 可能我的語文一般 只能理解為後者) 所以一下演算法結果為兩千多頭 如果想按前者只需修改幾個代碼即可 方案一 對每個元素進行討論 #define N 3000 #include /*當 a[i]=0 表示尚未出生 */ /*當 a[i]=1或2 表示出生年份 */ /*當 a[i]=3 表示具有繁殖能力*/ main () { int i,y,total; int t=0 , a[N] = {3}; for (y=1;y<=20;y++) /*對上一年的每頭牛進行檢驗*/ { total = t + 1; /*total為上一年總數 每個數組元素代表每頭牛*/ for (i=0;i<=total-1;i++) { if ( a[i] == 3 ) /*若有繁殖能力產下小牛*/ { t++ ; a[t] = 1 ;} /*即開闢“新的元素” a[t]=1 */ else a[i] = a[i] + 1; /*若無繁殖能力則"歲數+1"*/ } } printf ("%d",++t); getchar(); } 方案二 新的一年的個數(第四年)=上一年積累部分(第三年)+增長部分(第一年) 遞推關係類 (簡單迴圈語句(2種)、數組、函數遞迴)僅舉例四種演算法 ------------------------------------------------------- # define LINE0 "at first,we can know :/n the 1st year's count= 2./n the 2nd year's count= 3./n the 3th year's count= 4./n.../n/nAnd then,you will know:.../n/n" # define LINE "the %2dth year's count= %4d/n" # include /*以下程式均使用相同的先行編譯處理*/ main() { int y1=2,y2=3,y3=4,y4,i; printf(LINE0); for (i=4;i<=20;i+=4) { y4=y3+y1; y1=y4+y2; y2=y3+y1; y3=y4+y2; printf( LINE, i ,y4); printf( LINE, i+1,y1); printf( LINE, i+2,y2); printf( LINE, i+3,y3); } getchar(); } ----------------------------------------------------- main() { int y1=2,y2=3,y3=4,y4,i; printf(LINE0); for (i=4;i<=20;i++) { y4=y3+y1; y1=y2; y2=y3; y3=y4; printf( LINE, i ,y4); } getchar(); } ---------------------------------------------------- main() { int i, y[21] = {1,2,3,4}; printf (LINE0); for (i=4;i<=20;i++) { y[i] = y[i-1]+y[i-3]; printf( LINE,i,y[i]); } getchar (); } -------------------------------------- int add(int n) { int temp; if (n>3) { temp = add (n-1) + add (n-3); return temp; } else return n+1; } main() { int i; printf (LINE0); for (i=1;i<=20;i++) { printf( LINE,i,add(i)); } getchar (); }