C语言创新源于实践实训作业——报数

题目描述:有n人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号的那位。
输入
初始人数n
输出
最后一人的初始编号
样例输入
3
样例输出
2

当输入
7

输出
4

开始你的任务吧,祝你成功!

上面是问题,我的代码如下,求各位大佬救救我这个可怜的孩子!!

#include
int main ()
{
int a[100], b[100], i, j, n, k = 0, x; //定义变量
scanf("%d", &n);
int p = a;
a[1] = 3; //输入总人数
for(i = 2; i <= n; i++) //给每个人标号
{
a[i] = i;
b[i] = i;
}
for(j = 0, i = 1; j <= 2; i++)

{
if(a[i] != 0) //报数
{
j++;
}
if(a[i] == 0) //计算已退出的人数
{
k++;
}
if(j == 3 && k != (n-1)) //到3就再从1开始报
{
*(p + i) = 0;
j = 0;
}
if(k == (n-1)) //假如已经退出了总数减1个人
{
for(x = 1; x <= n; x++)
{
if(
(p+x) != 0)
printf("%d",x);
}
break;
}
if(i == n) //如果到了最后一个人就再返回到第一个人报数
{
i = 1;
k = 0;
}
}
}

无论输入什么都是输出1.。。。。

1个回答

你第一个for循环就已经有问题了吧,你仔细看看

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问