原题链接:[编程入门]报数问题
题目分析
一圈人说的就是一个循环抽象来说就是一圈循环要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 这是基础运用和一些逻辑的混合 对于入门的人来说有点挑战 但是 没挑战也没啥意思。。。。。。。。。。。。。。
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
#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]);} } } 稍微修改了一下 这个才是对的# 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个人而是很多时,时间可能超限