码迷,mamicode.com
首页 > 编程语言 > 详细

c语言经典算法——猴子偷桃问题

时间:2015-04-30 19:54:08      阅读:236      评论:0      收藏:0      [点我收藏+]

标签:

题目:海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?

算法分析://初始桃子数为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语言程序:

#include<stdio.h>
int main(int agrc, char*agrv[])
{
    int i, m, j, k, count;
    for (i = 4; i<10000; i += 4)
/*i为5个猴子分配桃子后最后剩余的桃子,必须为4的倍数,然后以此为基础,
向上推5次,如果刚好能够推到第五次,则此剩余的桃子数i是满足条件的,否则换一个
剩余的桃子数,直到找到符合条件的最小剩余桃子数*/
    {
        count = 0;
        m = i;
        for (k = 0; k<5; k++)
        {
            j = i / 4 * 5 + 1;
            i = j;
            if (j % 4 == 0)
                count++;
            else
                break;
        }
        i = m;
        if (count == 4)
        {
            printf("原来最少的桃子数为:%d\n", j);
            break;
        }
    }
    system("pause");
    return 0;
}

 

c语言经典算法——猴子偷桃问题

标签:

原文地址:http://www.cnblogs.com/dootoo/p/4469648.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!