求階梯數函數
在你面前有一條長長的階梯,若是你每次跨兩階,那麼最後剩餘一階,若是你每次跨三階,那麼最後剩兩階,若是你每次跨5階最後剩4階,若是你每次跨6階,最後剩餘5階,只有當你每次跨7階,才正好到頭,這個樓梯到底有多少階,spa
分析,由於每次跨7階,才正好到頭,說明樓梯的階數是7的倍數code
int main(){ ladder = 7; while(1){ if((ladder%2==1)&&(ladder%3==2)&&(ladder%5==4)&&(ladder%6==5)&&(ladder%7==0)){ printf("最少須要%d",ladder); break; } ladder+=7; } }
五家共井遞歸
如今有五家共用一口井,甲、乙、丙、丁、戌五家各有一條繩子汲水(下面用文字表示每一家的繩子):甲×2+乙=井深,乙×3+丙=井深,丙×4+丁=井深,丁×5+戌=井深,戌×6+甲=井深,求甲、乙、丙、丁、戌各家繩子的長度和井深。it
分析 設井深爲len,甲的繩長 len1,乙的繩長 len2,丙的繩長 len3,丁的繩長 len4,戌的繩長len5while
由條件可得 len1*2+len2 = lenco
len2*3+len3 = lenbackground
len3*4+len4 = lenreturn
len4*5+len5 = lenprintf
len5*6+len1 = len
依次把len1,len2,len3,len4,len5表明的繩長求出
len1 = len2+len3/2
len2 = len3+len4/3
len3 =len4+len5/4
len4 = len5+len1/5
int main() { int len1, len2, len3, len4, len5, len, flag; flag = 1; len5 = 0; while (flag) { len5 += 4; len1 = 0; while (flag) { len1 += 5; len4 = len5 + len1 / 5; len3 = len4 + len5 / 4; if (len3 % 2) { continue; } if (len4 % 3) { continue; } len2 = len3 + len4 / 3; if (len2 + len3 / 2 < len1) break; if (len2 + len3 / 2 == len1) flag = 0; } } len2 = 2 * len1 + len2; printf("長度爲\n"); printf("甲長度爲%d\n",len1); printf("乙長度爲%d\n",len2); printf("丙長度爲%d\n",len3); printf("丁長度爲%d\n",len4); printf("戊長度爲%d\n",len5); system("PAUSE"); return 0; }
雞兔同籠
「今有雞兔同籠,上有三十五頭,下有94足,問雞兔各幾何」
分析:雞有兩隻腳,兔子有四隻腳,所以可得二元一次方程組
設雞爲X,兔子爲Y
X + Y = 35
2X + 4Y = 94
int main(){ int head,foot,chook,rabbit; printf("請輸入雞和兔子的頭和腳數\n"); scanf("%d%d",&head,&foot); for(chook =0;chook<=head;chook++){ rabbit = head-chook; if(chook*2+rabbit*4==foot){ printf("雞的數量:%d,兔子的數量%d",chook,rabbit); } } }
猴子吃桃問題
一隻猴子摘了一堆桃子它天天吃了其中的一半而後在多吃了一個,直到第十天,他發現只有一個桃子了,問第一天摘了多少個桃子
分析:a10 = 1
a9=(a10+1)*2
a8 =(a9 +1 )*2
........
咱們使用遞歸函數來計算這種推算的問題
int peach(int n) { if (n == 1) return 1; else return (peach(n - 1) + 1) * 2; //前一天比後一天多一倍+1 } int main() { int days, sum; printf("請輸入天數\n"); scanf("%d", &days); sum = peach(days); printf("%d", sum); system("PAUSE"); return 0; }