解题思路: 用一个数组num[]代表n个人,用下标代表初始号数,一开始令num[0]到num[n-1]都为1,然后用一个循环,当第x个人的报数为3时,令num[x]=0,直到数组num[]中只有一个1时循环终止,输出该数组下标。(详细分析看代码注释)

注意事项: 该内容为小白所写,仅供参考,如有错误欢迎指正。

参考代码: 

#include <stdio.h>

    int main(){

        int n,i=0,j=0,count=0;

        int num[1000];            //可以写成可变数组,不过这样写比较省事

        scanf("%d",&n);

        for(i=0;i<n;i++){          

            num[i]=1;

        }

        for(i=0;i<n;i++){

            if(num[i]==1){        //将报数为3的踢出

                j++;                    //报数  报数为3,实际上不一定要使j等于3,只要是3的倍数就可以,比如3、6、9、12等,所以可以让j一直加下去。

                if(j%3==0){        //当j%3==0,即报数3,num[i]=0

                    num[i]=0;    

                    count++;       //记录数组中零的个数

                }else num[i]=1;

            }

            while(i==(n-1)){    //当遍历一遍数组后,令i=1,再遍历一遍数组

            i=-1;                     //令i=-1是因为for循环每次结束时i++,所以当i=-1时下一次循环i才会是0

            }

            if(count==n-1) break;  //当count==n-1,即数组num[]中只有一个1时,大循环终止

        }

        for(i=0;i<n;i++){

            if(num[i]!=0){

                printf("%d",i+1);      //遍历数组,输出元素为1的下标,即为最后留下的人是原来的号数。因为i一开始赋值为0,所以i要加1

            }

        }

    return 0;

}


点赞(0)
 

0.0分

3 人评分

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

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

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

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

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

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

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

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

评论列表 共有 0 条评论

暂无评论