c語言經典算法——猴子偷桃問題


題目:海灘上有一堆桃子,五只猴子來分。第一只猴子把這堆桃子憑據分為五份,多了一個,這只猴子把多的一個扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一個,它同樣把多的一個扔入海中,拿走了一份,第三、第四、第五只猴子都是這樣做的,問海灘上原來最少有多少個桃子?

算法分析://初始桃子數為sum
第一次:sum=5*x1+1   
第二次:4*x1=5*x2+1
第三次:4*x2=5*x3+1
第四次:4*x3=5*x4+1
第五次:4*x4=5*x5+1
第五次分配結束:剩下4*x5個桃子,而x5>=1,故i=4*x5>=4 。每次向上推j=(i/4)*5+1;i=j;每次上推結束后判斷j%4是否等於0,如果為0則繼續上推,否則更新i,直到找到能夠完成五次上推的整數i,最后可以得到最初的桃子數。

C語言程序:

 1 #include<stdio.h>
 2 int main(int agrc, char*agrv[])
 3 {
 4     int i, m, j, k, count;
 5     for (i = 4; i<10000; i += 4)
 6 /*i為5個猴子分配桃子后最后剩余的桃子,必須為4的倍數,然后以此為基礎,
 7 向上推5次,如果剛好能夠推到第五次,則此剩余的桃子數i是滿足條件的,否則換一個
 8 剩余的桃子數,直到找到符合條件的最小剩余桃子數*/
 9     {
10         count = 0;
11         m = i;
12         for (k = 0; k<5; k++)
13         {
14             j = i / 4 * 5 + 1;
15             i = j;
16             if (j % 4 == 0)
17                 count++;
18             else
19                 break;
20         }
21         i = m;
22         if (count == 4)
23         {
24             printf("原來最少的桃子數為:%d\n", j);
25             break;
26         }
27     }
28     system("pause");
29     return 0;
30 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM