约瑟夫问题/报数问题

#include<stdio.h> int main(){     int a[100]={0}; 	int n,m,l=0,i,j,s=0; 	scanf(%d %d,&n,&m); 		for(i=1;i<=n;i++){ 			for(j=1;j<=m;j++){ 			++s; 			if(s>n) s=1;//s从头开始数 			if(a[s]) j--;//如果遇到淘汰的不计数 		} 		printf(%d ,s); 		a[s]=1; 		}     return 0; } //约瑟夫问题 依次输出淘汰的序号
#include <stdio.h> #define MAXN 20  void CountOff( int n, int m, int out[] );  int main() {     int out[MAXN], n, m;     int i;          scanf(%d %d, &n, &m);     CountOff( n, m, out );        for ( i = 0; i < n; i++ )         printf(%d , out[i]);     printf(\n);          return 0; } void CountOff(int n, int m, int out[]) {     int a[MAXN], count = 1, index = 1;     for (int i = 0; i < n; i++)         a[i] = i + 1;     while (count <= n)         for (int i = 0; i < n; i++)         {             if (a[i] != 0)                 if (index % m == 0)                 {                     out[i] = count++;                     a[i] = 0;                     index = 1;                 }                 else                     index++;         } }   按编号输出淘汰的先后