猴子选大王看不懂。M为总数,S为出列数。为什么要把monkey[0]放在...
发布网友
发布时间:2024-10-19 20:32
我来回答
共4个回答
热心网友
时间:2024-11-03 18:43
这个写法有意思,虽然以解决问题效率来说并不是很实在……
先说模型,了解了就很容易明白
左轮手枪知道吗?
每次打出子弹后,轮子自动转圈,将下一颗子弹准备好
这个代码就是这样的
把猴子想象成轮盘,我们只能剔除某一个固定位子的上猴子
让猴子不断换座位,当换了S次的时候,剔除这固定位置上的猴子
for(i=MAX-1;i>=0;i--)//i是猴子所剩数量-1
{
for(k=1;k<=S;k++)//转轮盘,数到S
{
temp=Monkey[0];//因为要换位置,所以先拿起一只猴子,腾出空位
for(j=0;j<i;j++)//换位置,后面的坐到前面
{
Monkey[j]=Monkey[j+1];
}
Monkey[i]=temp;//之前为了腾空位拿起来的猴子再放回去,当k=S时,第二层循环结束,i--,现在这个位子上的猴子就再也不会被读到,就相当于这个位置上的猴子被剔除了
}
}
大概就这样,不得不说这代码写得很有艺术……
热心网友
时间:2024-11-03 18:37
呵呵,它叫西游记格斗,我玩过,猴子要放冰,火,缩小,金等绝技,要从老师那里学习,去买盘吧
热心网友
时间:2024-11-03 18:41
一个一个跳出来选的啊
热心网友
时间:2024-11-03 18:40
--------------------------------------------------------------------------------
char *a;
int m;
cout<<"输入猴子个数:"<<endl;
cin>>m;
a=new char[m];
cout<<"输入N:"<<endl;
int n;
cin>>n;
if(n>m)
{
cout<<"输入错误,必须小于M="<<m<<,重输入:"<<endl;
cin>>n;
}
for(int i=0;i<m;i++)
{
a[i]=1;
}
bool c=true;
for (int j=0;;j++)
{
for(int k=0;k<m;k++)
{
if(a[k]!=0)
{
c=false;
break;
}
else c=true;
}
if(c!=true)//判断退出
break;
if(j%n==0)
a[j%m]=0;
}
int result=j%m;
cout<<"最后猴子的序号是:"<<result<<endl;
---------------2-----------------
insert(int arry[],int address,int data)
{
int l=arry.length();
for(int i=l-1;i>address;i--)
{
arry[i]=arry[i-1];
}
arry[i]=data;
}
sort01(int a[])
{
int temp;
int l=a.length();
temp=a[0];
for(int i=1;i<l;i++)
{
if(a[i]<temp)
insert(a,i-1,temp);
temp=a[i];
}
}
------------------------------------
swap(int *x,int *y)
{
int temp;
temp=*x;
*y=temp
*x=*y;
}
l=a.length;
temp1=a[0];temp2=a[1];
for(int k=0;k<l;k++)
for(int i=k;i<l;i++)
{
if(a[i]>a[i+1])
swap(a[i],a[i+1);