C语言题,n个人围成一圈,从第一个人开始喊123喊到3的就退出,一圈一圈喊,剩下就两个人
答案:1 悬赏:60 手机版
解决时间 2021-02-20 02:57
- 提问者网友:动次大次蹦擦擦
- 2021-02-19 16:35
C语言题,n个人围成一圈,从第一个人开始喊123喊到3的就退出,一圈一圈喊,剩下就两个人两个人轮着喊123喊3的退下,直到剩最后一个,输出最后一个人是第几个。纯手打希望你们听的懂,谢谢!
最佳答案
- 五星知识达人网友:独钓一江月
- 2021-02-19 17:10
#include <stdio.h>
#define N 1000
#define m 3 //报数是3
int main()
{
int a[N] = { 0 };
int n;
int count = 0;
int j = 0;
int i;
scanf("%d", &n);
for (int i = 0; i < n; i++)
{
a[i] = i + 1;
}
int left = n - 1;
while (left)
{
if (a[j] != 0) //如果这个位置上面的人还在的话就count++,就进行报数
count++; //报数就+1
if (count == m)
{
a[j] = 0; //报数正好是3的话,这个位置的人退出,置零
count = 0; //报数也置零zongrenshu
left--;//总人数减少一个
}
j++; //序号向后
if (j > n - 1)
j = j%n;
}
for (i = 0; i < n; i++)
if (a[i])
printf("剩下的是序号为%d的人\n", a[i]);
return 0;
}
#define N 1000
#define m 3 //报数是3
int main()
{
int a[N] = { 0 };
int n;
int count = 0;
int j = 0;
int i;
scanf("%d", &n);
for (int i = 0; i < n; i++)
{
a[i] = i + 1;
}
int left = n - 1;
while (left)
{
if (a[j] != 0) //如果这个位置上面的人还在的话就count++,就进行报数
count++; //报数就+1
if (count == m)
{
a[j] = 0; //报数正好是3的话,这个位置的人退出,置零
count = 0; //报数也置零zongrenshu
left--;//总人数减少一个
}
j++; //序号向后
if (j > n - 1)
j = j%n;
}
for (i = 0; i < n; i++)
if (a[i])
printf("剩下的是序号为%d的人\n", a[i]);
return 0;
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯