CCF-CSP 201712-2游戏 满分题解+简单思路

CCF-CSP 201712-2游戏 满分题解+简单思路

题目链接:CCF-CSP 201712-2游戏

思路:

1. 采用结构体数组,存储小朋友的编号,以及是否被淘汰。

2. 用一个变量记录下当前的数字,用于判断。

3. 循环判断,当一轮循环结束时,从头开始进行判断,直到只剩下一位同学。

细节注意:从头判断时,需要将i设置为0,因为当前循环还未结束,在开始下一轮循环时i++变为1,才符合要求。

具体代码如下:

#include 
#include 
using namespace std;
const int N = 1e4+10;
int n,k;
struct node{
    int flag;//表示小朋友的编号
    bool pass=false;//判断小朋友是否备淘汰,默认为没有被淘汰
};
int main()
{
    node p[N];
    cin>>n>>k;
    for(int i=1;i<=n;i++)
    {
        p[i].flag=i;//初始化小朋友的编号
    }
    int cnt=1;//表示现在的报数
    int sum=n;//表示现在还剩小朋友的人数
    for(int i=1;i<=n;i++)//顺序判断
    {
        if((cnt%k==0||cnt%10==k)&&p[i].pass==false)//如果符合条件
        {
            p[i].pass=true;
            sum--;
            cnt++;
        }
        else if(cnt%k!=0&&cnt%10!=k&&p[i].pass==false)//如果不符合条件
        {
            cnt++;
        }
        if(i==n)i=0;//注意将i设置到开头,由于此时i还在循环中,则i=1-1=0;
        if(sum==1)break;//如果只剩下一位同学,则终止循环
    }
    for(int i=1;i<=n;i++)
    {
        if(p[i].pass==false)
        {
            cout<<p[i].flag<<endl;
        }
    }
    return 0;
}

你可能感兴趣的:(CCF-CSP,ccf,c++,算法)