这道程序用C 语言怎么编? !!!!急!!

来源:百度知道 编辑:UC知道 时间:2024/06/04 13:57:31
已知有N个人围成一圈,假设从第S个人从1开始报数,当有人报数为M或M的倍数,该人出圈,请用C语言编程,把这N个人的顺序求出来。
假设N=100
S=1
M=10
hust_jerome - 魔法学徒 一级
你的答案有错误,我运行过,但是结果不对。
急求另外一种方法!!!!!!!!!!!!!!!!!!!!
最好能够详细一些。

/*
在数组内放入1,从S开始对1的个数进行计数,每计数到M个1,则输出当前位置。
且当前位置清0。一直到所有的数都计数完毕。
*/

#include<stdio.h>
#define S 1 /*start*/
#define M 10 /*jump*/
#define N 100 /*total*/
void main()
{
int a[N+1];
int i,sum,subsum=0;
sum=N;
for(i=1;i<=N;i++) /*初始化,总共N个人*/
a[i]=1;
i=S-1;
while(sum>0)
{
subsum=0;
while(subsum<M) /*计数JUMPN*/
{
i++;
if(i>N)
i-=N;

if(a[i]!=0)
{
subsum++;
}

}
printf("%d ",i); /*输出当前数*/
a[i]=0; /*清零*/
sum--;
}
}
设置N=10,M=3,S=1
结果:
3 6 9 2 7 1 8 5 10 4
设置N=100,M=10,S=1
结果:
10 20 30 40 50 60 70 80 90 100 11 22 33 44 55 66 77 88 99 12 24 36 48 61 73 85 97 9 25 38 52 65 79 93 6 21 37 53 68 83 98 15 31 47 64 82 1 17 35 56 74 92 13 32 54 75 95 18 42 63 87 8 39 62 89 16 45 72 3 29 67 96 28 69 4 43 81 23 59