作业帮 > 综合 > 作业

有N个人围成一圈,顺序排号.从第一个人开始报号,(1-3报号)报到3的退出,问最后剩下的是几号?

来源:学生作业帮 编辑:百度作业网作业帮 分类:综合作业 时间:2024/07/16 04:04:44
有N个人围成一圈,顺序排号.从第一个人开始报号,(1-3报号)报到3的退出,问最后剩下的是几号?
求大神帮忙看下哪个地方有错,我试了只有m=1的时候能输出10;其他的都没有输出.
#include
using namespace std;
int main()
{
void ysf(int* p,int m,int n);
int a[10];
int i;
for(i=0;i
有N个人围成一圈,顺序排号.从第一个人开始报号,(1-3报号)报到3的退出,问最后剩下的是几号?
#include <stdio.h>
#define MAX 200

int fun(int a[],int n,int number) {
int i = 0,cnt = 0,m = n,res;
while(m) {
if(a[i]) ++cnt;
if(cnt == number) {
cnt = 0;
printf("%d ",a[i]);
res = a[i];
a[i] = 0;
--m;
}
i = (i + 1) % n;
}
printf("\n");
return res;
}

int main() {
int i,n,a[MAX],number = 3;
printf("n = ");
scanf("%d",&n);
if(n < 1 || n > MAX) n = MAX;
for(i = 0; i < n; ++i)
a[i] = i + 1;
printf("最后出列的是:%d\n",fun(a,n,number));
return 0;
}
再问: 额,我需要高手指出我的错误。这种答案网上都可以找到,不过别人的思路借鉴下就好,为什么我的就不行。。。。。大神,求指点啊!!!
再答: 首先说明,这是我自己编写的,绝非抄袭。void ysf(int* p,int m,int n) {
\x09int i=0;//循环计数器
    int k=1;//筛选计数器
    int s = n;//剩余人数计数器
    while(s > 1) {
\x09\x09if(*(p + i) != 0) {
\x09\x09\x09if(k%m == 0) {
\x09\x09\x09\x09k++; k = k%m; // *** 只有满足k == m时才计数
\x09\x09\x09\x09*(p + i) = 0;s--;
            }
            i++; i = i%n;
        }
    }
}
再问: 高手,谢谢啦,我找到错误的地方了

else k++;
/* i++;i=i%n;//循环计数器自增 */ 把这一句放到下面这个循环就行
}
i++;i=i%n; //这样就完全对啦,我就说我的算法没错。。。。。

}
}
C语言:有n个人围成一圈,顺序排号.从第一个人开始报数(从1到3报 数),凡报到3的人退出圈子 问最后留下 C语言:有n个人围成一圈,顺序排号.从第一个人开始报数(从1到3报 数),凡报到3的人退出圈子 有10个人围成一圈,顺序排号.从第一个人开始报数(从1到3报数),凡报到了的人退出圈子,问最后留下的是原来第几号的那位. 2:有n个人围成一圈,顺序排号.从第一个人开始报数(从1到3报数),凡报到3的人退出圈子, 有n个人围成一圈,顺序排号.从第一个人开始报数(从1到3报数),凡报到3的人退出(pascal 、用指针完成下面程序:有n个人围成一圈,顺序排号,从第一个人开始报数(从1-3报数),凡报到3的退出圈子,请编程求出最后 c语言:有n个人围成一圈,顺序排号.从第一个人开始报数(从1~3报数),报到3的人退出圈子,求退出顺序 用C语言编写:有n个人围成一圈,顺序排号.从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,请输出报数出列圈及最 C语言:有n人围成一圈,顺序排号.从第1个人开始报数(从1到3报数),凡报到3的人退出圈子, C语言指针 有n个人围城一圈,顺序排号.从第一个人开始报数(从1报到3),凡报到3的人 有N个人围成一个圈顺序编号,从第一个人开始报数(从1到M),凡报到M的人退出圈子, C语言:有n个人围成一圈,按顺序从1到n编号.从第一个人开始报数,报数3的人退出圈子