自定义结果如图:
编号为 1,2,3,…,n 的 n 个人围坐一圈,任选一个正整数 m 作为报数上限值,从第一个人开始按顺时针方向报数,报数到 m 时停止,报数为 m 的人出列。从出列人的顺时针方向的下一个人开始又从 1 重新报数,如此下去,直到所有人都全部出列为止。算法基本内容,原理详细更多的可以参考:C语言中文网。http://c.biancheng.net/view/608.html
源码如下:
#include<stdio.h>
#include<iostream>
#include<string>
#include<fstream>
using namespace std;
#define N 100
int josef(int a[],int n,int m)
{
int i,j,k=0;
for(i=0;i<n;i++)
{
j=1;
while(j<m)
{
while(a[k]==0)
k=(k+1)%n;
j++;
k=(k+1)%n;
}
while(a[k]==0)
k=(k+1)%n;
printf("%d ",a[k]);
a[k]=0;
}
return 0;
}
int main()
{
int a[100];
int i,j,m,n;
printf("input n and m:");
scanf("%d%d",&n,&m);
for(i=0;i<n;i++)
a[i]=i+1;
printf("\n output:\n");
josef(a,n,m);
printf("\n");
return 0;
}