注册 登录
编程论坛 C++教室

新手求教:猴子选大王问题。。错在哪了?

love31座森林 发布于 2014-05-18 17:13, 524 次点击
#include<iostream>
using namespace std;
void main()
{   int n,i,k,a[100],m,j=0;
    cout<<"请输入猴子数为:";
    cin>>n;
    cout<<"请输入报数;";
    cin>>m;
    for(i=0;i<n;i++)
        a[i]=1;
    i=0;
    while(j<n)
    {k=1;
        while(k<m)
        {   if(a[i]!=0){k++; i=(i+1)%n;}
        else i=(i+1)%n;}
            if(a[i]==0)j--;
                 else  a[i]=0;
                        
    j++;}
    for(i=0;i<n;i++)
    {if(a[i]!=0)cout<<i+1<<endl;}
}
6 回复
#2
funyh2502014-05-18 17:31
一句句读下去你就知道错哪了

刚开始学多看书多琢磨
实在琢磨不透上机敲敲
#3
love31座森林2014-05-18 17:55
回复 2 楼 funyh250
关键是运行不对,,,但不知道错哪了。。。。。。
#4
yxq2110462014-05-19 09:50
while (k<m)
{
 if (a[i] != 0){ k++; i = (i + 1) % n; }
 else i = (i + 1) % n;
}
好像第二次的时候会出现死循环
第一次完后,a[1]=0,
第二次就不会执行if (a[i] != 0){ k++; i = (i + 1) % n; },k=1永远小于m,然后一直执行else i = (i + 1) % n;
#5
jjfai2014-05-19 10:36
while(j<n)
    {k=1;
        while(k<m)
         {   if(a[i]!=0){k++; i=(i+1)%n;}
        else i=(i+1)%n;}
            if(a[i]==0)j--;
                 else  a[i]=0;
                        
                 j++;}
这个循环有问题,注意看j值的变化!!!!!!
#6
jjfai2014-05-19 11:32
#include<iostream>       //猴子选大王
using namespace std;
void main()
{   int n,i,k,a[100],m,j=0;   
    cout<<"请输入猴子数为:";
    cin>>n;
    cout<<"请输入报数;";
    cin>>m;
    for(i=0;i<n;i++)
        a[i]=1;
    i=0;
    while(j<n)
    {
        k=0;
        while(k<m)
         {   if(a[i]!=0)
            {
            k++; i=(i+1)%(n+1);
             }
             else
            i=(i+1)%(n+1);
         }
            if(a[i-1]==0)
                j--;
            else  
                a[i-1]=0;
                j++;
    }
    for(i=0;i<n;i++)
    {
        if(a[i]!=0)
        cout<<i+1<<endl;
    }
}
#7
yangfrancis2014-05-20 22:35
有点看不明白是按什么规则来选。把各个变量所指意义的注释贴出来大家研究啊。
1