题目分析

     一圈人说的就是一个循环抽象来说就是一圈循环要T了多少个成员,不妨把T掉的人变为0这样最后输出不为0的

即可

代码

#include<stdio.h>
main()
{

    int i,a[100],j,k=0;//定义人员数量
    int quit=0;//退出人数
    scanf("%d",&i);//参与人数
    for(j=0;j<=i;j++)//给成员编号
    {
        a[j]=j;

    }
        j=0;
    while(quit<i-1)//剩最后一个人时退出
    {

        if(a[j]!=0)k++;//过滤退出的玩家,剩下的玩家喊口号
        if(k==3){a[j]=0,quit++;k=0;}//当有玩家喊道3时退出
        j++;//下一个人
       if(j==i)j=0;//检测一圈是否结束
    }
    for(j=0;j<i;j++)//筛选出在场的玩家
    {
        if(a[j]!=0){printf("%d",a[j]);}
    }


}

ps 这是基础运用和一些逻辑的混合 对于入门的人来说有点挑战  但是  没挑战也没啥意思。。。。。。。。。。。。。。

点赞(43)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 16 条评论

saitama 6年前 回复TA
#include<stdio.h>
main()
{
 
    int i,a[100],j,k=0;
    int quit=0;
    scanf("%d",&i);
    for(j=0;j<i;j++)
    {
        a[j]=j+1;
 
    }
        j=0;
    while(quit<i-1)
    {
 
        if(a[j]!=0)k++;
        if(k==3){a[j]=0,quit++;k=0;}
        j++;
       if(j==i)j=0;
    }
    for(j=0;j<i;j++)
    {
        if(a[j]!=0){printf("%d",a[j]);}
    }
}
稍微修改了一下 这个才是对的
saitama 6年前 回复TA
@laolin2333 一般方法只能这样一次次循环去掉了
Christ 6年前 回复TA
@zdm 第24行
白亦非 6年前 回复TA
@拙木鸟 不用改的,本来就对
zdm 6年前 回复TA
没有结果输出?
Cool冷 6年前 回复TA
把赋值改成
a[j]=j+1;
这样人数才正确
楼上评论还是错的。。。
laolin2333 7年前 回复TA
@laolin2333 说实在,我至今不是很懂这关键一步,只知道这个是正确的,好像可以在数学上证明。
tianbowen 7年前 回复TA
@laolin2333 请问一下s=(s+N)%i 这个逻辑是怎么想出来的?
laolin2333 7年前 回复TA
# include <iostream>
using namespace std;
 
int main()
{
    int i, s = 0;
    int M, N;
 
    cout << "input the number M and N:" << endl;
    cin >> M >> N;
 
    for (i = 2; i <= M; i++)
    {
        s = (s + N) % i;
    }
 
    cout << "the number is:" << s + 1 << endl;
}//某种恐怖的东西,楼主的方法,在不是数3个人而是很多时,时间可能超限
laolin2333 7年前 回复TA
写的挺好的