c语言编程水手分椰子问题,我自己写了一段程序,答案不对

c语言编程水手分椰子问题,我自己写了一段程序,答案不对,第1张

这道题我也想了很久,看了网上很多方法都是直接给出公式算,我自己找了下这个问题的规律,用迭代和逆向递推的方法解决了这个问题,具体代码如下:(程序附有注释,建议大家动笔画画图,看看不同水手个数的情况是怎么样的,这样就可以理解了)

#include <stdio.h>

#include<stdlib.h>

#include<math.h>

 main()

{

int n   //水手个数

printf("Input n(1<n<=5):\n")

scanf("%d",&n)

//增加程序的健壮性

if(n>1&&n<=5)

printf("y=%d\n",Coconu (n))

else

printf("Error!\n")

system("pause")

 }

 int Coconu (int n)

 {

int i   //内层循环变量

int j=1 //外层循环变量,

int s  //原来椰子的个数

int r  //迭代变量

do  //第一层循环:增加最后一名水手平均分完之后的每一份椰子数,从1开始(1最小)

{

r=j*n+1  //最后一名水手总的椰子数

// 第二层循环:利用迭代及反向递推的方法求出原先的椰子数

for(i=n-1i>0i--)

{

// 在迭代过程中,如果逆向递推出现不能整除的情况,则跳出循环。(因为椰子必须是整个的)

if(r%(n-1)!=0)

break

// 迭代

s=(r/(n-1))*n+1

r=s

}

j++

}while(i!=0)  //i=0则表示完成了循环,整个循环完成s才是最终的原先的椰子个数

return s

 }

问题只说一半,我看了你的提问,首先是去百度了你问的是什么。。。。

如果我搜索的不错,你问的问题是不是:

水手分椰子问题。五个水手发现了一堆椰子,第一个水手把椰子分成5等分,多出一个给了猴子自己藏起了一堆;第二个水手把剩下的椰子混合再分,又分为5等分,多出1个给了猴子,自己藏起1堆,第三,四个水手也同样来分第五个水手把椰子分为5等分后,正好多出1个给猴子,问这堆椰子有多少个?

如果是这个,C代码我就不写,因为我百度搜索问题的时候,也在百度文库看到了代码= =

至于你说的

3121

跟着逻辑走一遍就知道是不是了

第一水手 (float)(3121-1)/5 =624 拿走624 留下2496(624*4)

第二水手 (float)(2496-1)/5=499 拿走499 留下1996(499 *4)

第三水手 (float)(1996-1)/5=399 拿走399 留下1596(399 *4)

第四水手 (float)(1596-1)/5=319 拿走319 留下1276(319 *4)

第四水手 (float)(1276-1)/5=255 拿走255 留下1020(255*4)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11813453.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存