C语言枚举问题 猴子分桃

C语言枚举问题 猴子分桃,第1张

死循环了!

if(m-1>0&&(m-1)%5==0&&(m-1)/5!=0)//判断桃子能否合题分配

这句里,之前 m=1,这里始终不能成立,if 不运行,然后就一直循环。。。。

我先说说我对题目的理解:

n只猴子排队拿桃子,每次篮子里放k的阶加(1到k的和,k~)个桃子,在没拿够m个桃子前,猴子们都可以直接拿k~个桃子,当领桃子的猴子手上的桃子加上篮子里的大于等于m的时候,队列里的第一个猴子补满m个并离开队列,如果篮子里还有桃子的话,下一个猴子尝试补满m个,满了就离开队列,不满的话继续去排队。

基于这个理解的前提下,

其实思路方面不复杂:

在获得输入之后,生成两个长度为n的一维数组(直接用二维数组也可以),分别记录“当前各个猴子手上的桃子数”和“离开顺序”(结果),当结果(离开顺序)没填满前,不停的循环执行桃子数的判断:

1、满m个的跳过;

2、加上k~个桃子后超过m的,记为m个,并在结果里面记录当前编号,多于m的个数加到下一个猴子,然后跳过下一个猴子;

3、其他情况直接加上k~个桃子。

两个for循环就OK的事情。

但是有个可以优化的地方:在不满m之前,其实每个猴子都是直接领k~个桃子然后继续排队。也就是说,在第一只猴子手上的桃子加上k~个桃子不够m个的时候,实际就是一直在做“每个猴子给k~个桃子”这一步,而这步对解开题目而言,完全有另一个优化的步骤的。

优化后的伪代码如下:

//定义、描述输出、获取的过程(略)

k=(k(k-1)-k);     //k的阶加

int [2][n] result=new int[2][n]{0};  //初始化二维数组,有可能样式不对

for(int i=0;i<n;i++)  //n只猴子对应在数组里的编号是0到n-1

 int[0][i]=(m/k)k   //直接赋值“每个猴子已经拿到加上k~个桃子就不少于m的桃子

 //(m/k)k这种在自然语言里看来是多余的一步,但在代码里却是关键一步,后面解释

int left=0,j=0;

do

{

 for(int i=0;i<n;i++)

 {

  if(result[0][i]==m)

   continue;     //拿满m个的猴子跳过处理

  left=k;

  do

  {

   if(i>n-1)

    i=0;      //到第n只猴子后,重新从第1只猴子开始

   while(result[0][i]==m)

    i+=1;      //拿满m个的猴子跳过处理

   if(result[0][i]+left>m)

   {

    left=result[0][i]+left-m;

    result[0][i]=m;

    i+=1;

    result[1][j++]=i;

   }

   else

   {

    result[0][i]+=left;

    left=0;

   }

  }while(left>0)

 }

}while(j<n)      //当结果(离开顺序)没填满前,重新从第1只猴子开始

//输出结果(略)

需要解释的是:(m/k)k这步,在程序中因为是用到整数型参数处理,所以除法的结果是整数的商,也就是把余数抹掉。

PS:写代码的过程中,当想到上面的倒数一步的数量后,发现其实可以在数组内记录余数,然后用减法,记录剩余为0的顺序。不过,在完成代码前这样改思路会延长开发时间,所以最好先完成功能,然后完善。

小猴=2+5=7个

桃子=7×7+2=51个

我们暂且把每只7个看作分到某一轮而这时剩下两个,每只8个,再继续分下一轮,这时还差5个,为什么呢就是因为有7只猴子才到这一轮分的时候差5个,所以猴子是7只,桃子有7×7+2或7×8-5=51个

每只7个剩2个,每只8个差5个如果有了5个,加上原剩的2个,一共是7个;每个小猴增加一个,刚够,说明小猴是7个;那么,桃子就是7×7+2=51个;

8-7=1, 2+5=7,7除以1=7 ,所以最少有7只猴 7×7+2=51,所以最少有51个桃子

以上就是关于C语言枚举问题 猴子分桃全部的内容,包括:C语言枚举问题 猴子分桃、c/c++ 猴子分桃问题、小猴分桃,每只7个剩余2个每只8个差5个,最少有几只小猴最少有多少个桃孑方法或答案.要飞常清楚等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/zz/10144377.html

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

发表评论

登录后才能评论

评论列表(0条)

保存