问题标题: 酷町堂:4000

0
0
已解决
宋梓涵
宋梓涵
新手光能
新手光能
#include<iostream>
using namespace std;
int a[101];
int last_one(int n,int m,int a[])
{
    int s=0,i=0;
    while(s<n)
    {
        int t=0;
        while(1)
        {
            i++;
            if(i>n)
                i-=n;
            if(a[i]==0)
                t++;
            if(t==m)
            {
                a[i]=1;
                t=0;
                s++;
                cout<<i<<" ";
                break;
            }
        }
    }
    return i;
}
int main()
{
    int n,m;
    cin>>n>>m;
    cout<<last_one(n,m,a);
    return 0;
}

 


0
已采纳
傅文彬
傅文彬
新手天翼
新手天翼

 

3999 报数游戏 1

这题比较复杂,我们可以采用如下这种思路解题:

  1. 首先定义一个数组a[100]表示一开始的人数,那么紧接着将数组中的每个元素标记为 1,表示一开始每个人都没有退出圈子;
  2. 函数实现退圈的过程:因为要求求出最后一个人的编号,我们可以定义一个s 表示一开始的游戏人数,那么当s==1 的时候,循环退出,所以循环可以使用while(s>1),然后每次数到 4 的人退出,所以我们可以定义一个sum 表示当前这次循环数到几了,如果没有到4, 执行sum+=a[i];(因为 a[i]没有出圈的时候为 1,出圈的时候为 0) 这样当sum=4 的时候,执行a[i]=0;sum=0;即可。
  3. 主函数中调用函数,但并未结束,最后需要找到数组中唯一的非

0 元素的编号,将它输出即可。

 

4000 报数游戏 2

本题和上题几乎一直,只需要改动一下sum 的条件即可。

0
李绍骞
李绍骞
修练者
修练者

核心代码:

定义函数

void Last_one(int n,int a[],int m)
{
    int c=0,i=0,cnt;
    while(c<n)
    { 
     int t=0;
        while(1)
        {
            i++;
            if(i>n)
            {
    i-=n;
   }  
            if(a[i]==0)
            {
    t++;
   }    
            if(t==m)
            {
    c++;
    a[i]+=c;
               break;
            }
       }
 }
}

主函数内,因为函数只是记录,所以......

for(int i=1;i<=n;i++)
    {
  cout<<a[i]<<" ";
 }

0
0
0
宋梓涵
宋梓涵
新手光能
新手光能
#include<iostream>
using namespace std;
int a[101];
int last_one(int n,int m,int a[])
{
    int s=0,i=0;
    while(s<n)
    {
        int t=0;
        while(1)
        {
            i++;
            if(i>n)
                i-=n;
            if(a[i]==0)
                t++;
            if(t==m)
            {
                a[i]=1;
                s++;
                t=1;
                cout<<i<<" ";
                break;
            }
        }
    }
    return i;
}
int main()
{
    int n,m;
    cin>>n>>m;
    cout<<last_one(n,m,a);
    return 0;
}

 

0
我要回答