解题思路:创建一个数组,根据输入的人数往数组中存放每个人的编号,虽然没办法直接删除数组中的元素,但编号是从1开始的,也就是说当报数到3的时候,可以通过将那个编号变为0的方式达到退出的效果(变为其他数也行,不和编号冲突就没问题),当数组中只剩下一个非0的数时,那个数就是最后留下来的人的编号。
注意事项:
参考代码:
#include
int main()
{
int n;//总人数
scanf("%d",&n);
int a[10000]={0};//创建一个数组
for(int b=0;b<n;b++){//从a[0]开始依次将1~n存入数组中
a[b]=b+1;
}
int z=0;//判断报数次数
int zero=n-1;//需要退出的人数,需要退出(总人数-1)个人,就留一个人
while(zero)//zero为0时结束循环,zero为0就意味着只有一人没有退出了
{
for(int b=0;b<n;b++){//读取数组中的数,每读取一次非0的数z就+1,意味着报数次数+1,z为3时就把那个数组的数变为0,相当于题目中的退出
if(a[b]!=0)//当读取数组中的数为0时就不加报数次数
{
z++;
}
if(3==z)
{
a[b]=0;//该编号退出
z=0;//z初始化为0,相当于报数到3时重新开始报数
zero--;
}
}
}
for(int b=0;b<n;b++){
if(a[b]!=0)//此时数组中还有一个数不为0,即最后留下的人的编号
{
printf("%d",a[b]);
return 0;//找到那个数就可以结束循环了
}
}
return 0;
}
0.0分
1 人评分
【金明的预算方案】 (C++代码)浏览:997 |
用筛法求之N内的素数。 (C语言代码)浏览:685 |
C语言程序设计教程(第三版)课后习题7.2 (C语言代码)浏览:570 |
【计算直线的交点数】 (C语言代码)浏览:1501 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:490 |
星期判断机 (C语言代码)浏览:892 |
循环入门练习6 (C语言代码)浏览:1058 |
简单的a+b (C语言代码)浏览:572 |
1035 题解浏览:875 |
C语言程序设计教程(第三版)课后习题8.3 (C语言代码)浏览:465 |