发布网友 发布时间:2022-04-22 03:59
共2个回答
热心网友 时间:2023-06-26 12:33
可使用数组回溯法:
回溯法是:将猴子总个数循环,第一次循环都是将当前需要出圈的猴子排列到数组的末尾。这样全部猴子循环一遍后,数组头的猴子极为猴王。注意,循环一起找出第一个之后将之循环它之前的剩余数组。即程序中的for(i=MAX-1;i>=0;i--)
[cpp] view plaincopy
#include<stdio.h>
#include<dos.h>
#define MAX 30/*定义猴子总数*/
int i,j,k,temp;
int Monkey[MAX],S;
void init()
{
for(i=0;i<MAX;i++)
Monkey[i]=i+1;
for(i=0;i<MAX;i++)
printf("%d ",Monkey[i]);/*让猴子站成一圈*/
printf("\n");
}
void output()
{
printf("猴子淘汰出圈的顺序是:\n\r");
for(i=MAX-1;i>=0;i--)
printf("第 %3d 只猴子出圈!\n\r",Monkey[i]);
printf("猴王是:第 %d 只猴子\n\r",Monkey[0]);
}
void main()
{
init();
printf("请输入出队的序数:");
scanf("%d",&S);/*读取猴子出队序数*/
for(i=MAX-1;i>=0;i--)
{
for(k=1;k<=S;k++)
{
temp=Monkey[0];
for(j=0;j<i;j++)
{
Monkey[j]=Monkey[j+1];
}
Monkey[i]=temp;
}/*将每一次要出队的猴子排到队尾*/
}
output();
}
热心网友 时间:2023-06-26 12:33
猴子选大王数据结构算法?