问题标题: 酷町堂:5604 出队游戏(queue)

0
0
已解决
万韧山
万韧山
初级天翼
初级天翼

题目链接: 酷町堂:5604

#include<bits/stdc++.h>
using namespace std;
int n,ans,cnt,k;
bool v[10005],f[10005];
int main(){
//取个位 %10
//取十位 /10%10
//取百位 /100%10
//取千位 /1000%10
//2^31次方没有超long long
    //freopen("题目英文名.in","r",stdin);
    //freopen("题目英文名.out","w",stdout);
    cin>>n;
    k=n;
    for(int i=1;i<=n;i++){
        v[i]=true;
    }

    for(int i=1;i<=n;i++){
        cnt++;
        if(cnt==2){
            v[i]=0;
            cnt=0;
            k--;
        }
        if(cnt==3){
            v[i]=0;
            cnt=0;
            k--;
        }
    }

    for(int i=1;i<=n;i++){
        if(k<=3){
            if(v[i]) cout<<i<<' ';
        } 
    }   
    //fclose(stdin);
    //fclose(stdout);
    return 0;
}

没学过队列(艹

有没有大佬解答

第二个样例不输出


0
已采纳
钱思源
钱思源
高级天翼
高级天翼

用while里嵌套for里再嵌套if

输出用for

 

这题在上冲刺班时老师带我们做过

0
熊潇然
熊潇然
初级启示者
初级启示者

这一题用模拟就行了,不用队列

定义bool类型的f[10005],表示记录第 i 个人是否出列,0为没出队,1为出队了

定义int类型res,res初值为n,表示还没出队的人数

while(res>3){

    定义int类型k=0,表示报数

    遍历1~n{

        如果第 i 个人没出队{

            报数+1

            如果报到2,这第 i 个人就出列,同时报数置0,还没出对的人数-1

        }

    }

    如果此时m<=3,退出while循环

    报数置0

    和上一个遍历1~n一样,if改成如果报道3就行了

}

最后输出没有出队的人

0
钱帅文
钱帅文
中级天翼
中级天翼

while循环内:

int cnt = 0;//报的数

for (int i = 1; i <= n; i++) {

    if (编号为i的人没有出队) { 

        cnt++;

        if (cnt == 2) { //报到2了

            剩余人数-1

            a[i] = true;//让i出队;

    }

}

cnt = 0;//下一-次重报数

if (res <= 3) {//如果剩下的人<=3

    break;

}

cnt = 0;//报的数

然后依次报3差不多(复制下来改个数就行了)

我要回答