新手问题:C语言

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

自己编了好几个程序都出不来``` 就不发自己的闹笑话了。。请各位大哥大姐帮个忙编下这个小程序。

看的有点蒙`

以后大概会一天发一个问题问吧`` 希望可以在CSDN里慢慢成长。。

同样的。20分奉上``
...全文
200 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
SheenCpp 2008-03-26
  • 打赏
  • 举报
回复
n的取值应该是 3 7 11 ...
公差应该是4
弄错了..汗..
应该写成
for (n = 3; n < 32767; n += 4)
SheenCpp 2008-03-26
  • 打赏
  • 举报
回复
BeforeTake = 5 * n + 1 && BeforeTake % 4 == 0
4的倍数的末位依次为 4 8 2 6 0 4 8 2 6 ...
1 * 5 + 1 = 6, 2 * 5 +1 = 11,3 * 5 + 1 = 16, 4 * 5 + 1 = 21, 5 * 5 + 1 = 26, ...
所以n应当从1开始取值且公差为2,以上代码中的n是从3开始的,呵呵..
SheenCpp 2008-03-26
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <stdlib.h>
// Coded By Sheen
int main()
{
int BeforeTake, n, i; //BeforeTake 是每一次取走前桃子的的数目,
int mold;
for (n = 3; n < 32767; n += 2) //当BeforeTake为第一次取走桃子前即桃子总数
{
BeforeTake = 5 * n + 1; //最后一个猴子取走的桃子数目为n
mold = BeforeTake % 4; //从第二次取走前开始,每次取走前桃子的数目应该是4的倍数
for (i = 1; mold ==0 && i < 5; i++)
{
BeforeTake = (BeforeTake / 4) * 5 +1; //从末尾往前倒推上一次取走前的桃子数目
mold = BeforeTake % 4;
}
if (i == 5) //如果循环体执行完的话,BeforeTake即为符合条件的数
printf("%d\n", BeforeTake);
}

return 0;
}


// Output:
// 3121
// 6246
// 9371
// 12496
// .....

wenjun1130 2008-03-25
  • 打赏
  • 举报
回复
假设最后一次拿的个数为X,则剩下的个数为4X,在它刚到还没拿时的总数即为5X+1;
那么倒数第二次拿的个数为Y,则剩下的个数为4Y;4Y就是后一次拿的总数既4Y=5X+1;
所以倒数第二次拿的个数为(5X+1)/4;以此类推;
SheenCpp 2008-03-25
  • 打赏
  • 举报
回复
Mark..
wenjun1130 2008-03-24
  • 打赏
  • 举报
回复

#include <stdio.h>
main()
{
int i=1,min=1,times=0;
while(1)
{
while((i*5+1)%4==0)
{
printf("get=%d,remain=%d,all=%d\n",i,i*4,i*5+1);
if(++times==5) break;
i=(i*5+1)/4;
}
if(times!=0) printf("\n");
if(times==5) break;
i=++min;
times=0;
}
}
风吹PP凉SS 2008-03-24
  • 打赏
  • 举报
回复
用递归
agxywjbing 2008-03-24
  • 打赏
  • 举报
回复
答案有很多,如果定义成long int答案会更多!!
linhui1314 2008-03-24
  • 打赏
  • 举报
回复
4楼的运行后得出
3906
7031
10156
13281
16406
19531
22656
25781
28906
32031

如何理解?
enewell 2008-03-24
  • 打赏
  • 举报
回复

4楼的循环似乎可以改进一些
让效率更高些
linhui1314 2008-03-24
  • 打赏
  • 举报
回复
想了一个晚上。思路都糨糊了```
一看到2楼的东西我竟然傻了。。
新手。。唉。。。
agxywjbing 2008-03-24
  • 打赏
  • 举报
回复
#include "stdio.h"
main()
{int i,n=0,x=1;
while(x>0&&x<=32767)
{x=n+1;
for(i=1;i<=5;i++)
x=x*5+1;
if(x>0)
printf("%d\n",x);
n++;
}

}
试一下,望指正.
linhui1314 2008-03-24
  • 打赏
  • 举报
回复
能否给出具体程序?
独孤过儿 2008-03-24
  • 打赏
  • 举报
回复
dizuo兄抢沙发的本领见长啊,嘿嘿...
ryfdizuo 2008-03-24
  • 打赏
  • 举报
回复
设总共的个数N,x1,x2,x3,x4,x5分别为五只猴子所拿走的桃子数目;有方程:
5*x1+1=N;
5*x2+x1+1=N-1;
5*x3+x2+x1+1=N-2;
5*x4+x3+x2+x1+1=N-3;
5*x5+x4+x3+x2+x1+1=N-4;
就是解方程了吧,




69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧