2月 03

猴子们的问题

【2012 张子萌】
其实此问题比较容易,在网上也有很多版本。为了学习我自己做了一下,在CeotOS5.4系统编译调试通过。

猴子分桃子:有5只猴子在海边发现一堆桃子,决定第二天来平分.第二天清晨,第一只猴子最早来到,它左分右分分不开,就朝海里扔了一只,恰好可以分成5份,它拿上自己的一份走了.第2,3,4,5只猴子也遇到同样的问题,采用了同样的方法,都是扔掉一只后,恰好可以分成5份.问这堆桃子至少有多少只.

#include

main ()
{
int monkeys,peach=0,all_peach;
do
{
peach=peach+1;
all_peach=peach;
for (monkeys=5;monkeys>0;monkeys–)
{
all_peach=all_peach*5+1;
}
}while (((all_peach-1)/2)==0);
printf(“==>%dn”,all_peach);
}

结果如下:
# ./test
==>3906

猴子吃桃子:猴子第一天摘下N个桃子,当时就吃了总数的一半,还不过瘾,
就又吃了一个。第二天又将剩下的桃子吃掉一半,又多吃了一个。
以后每天都吃前一天剩下的一半零一个。
到第9天在想吃的时候就剩一个桃子了,求第一天共摘下来多少个桃子?

#include

main ()
{
int days,peach=1;
for(days=9;days>0;days–)
{
peach=(peach+1)*2;
}
printf(“==>%d”,peach);
}

结果如下:
# ./test
==>1534

猴子选大王:n只猴子围坐成一个圈,按顺时针方向从1到n编号。
然后从1号猴子开始沿顺时针方向从1开始报数,报到m的猴子出局,
再从刚出局猴子的下一个位置重新开始报数,如此重复,直至剩下一个猴子,
它就是大王。

#include

main ()
{
int monkeys,num;
int loops,kings;
int i,j=-1;
printf(“pleas input monkey amonut:”);
scanf(“%d”,&monkeys);
printf(“pleas input num:”);
scanf(“%d”,&num);
int m_k[num];
for (i=0;i {
m_k[i]=1;
}
kings=monkeys;
//start choose king
do
{
loops=num;
while(loops>0)
{
j=j+1;
if (j>monkeys-1) j=0;
if (m_k[j]==1)
loops=loops-1;
}
m_k[j]=0;
kings=kings-1;
}while(kings>1);
for (i=0;i {
printf(“%d “,m_k[i]);
}
}

结果如下:
# ./test
pleas input monkey amonut:6
pleas input num:2
0 0 0 0 1 0