约瑟夫环:用户输入M,N值,从1至N开始顺序循环数数,每数到M输出该数值,
循环数数,例如 N=20 ,M=5,则从1开始数5个数至值为5,从5开始继续数5个至值为10...数至最后一个数后,循环从1开始数。
运行结果如附录
动态数组实现方式如下
#include<stdio.h>
#include<stdlib.h>
//数组实现
int main()
{
int n=0;
int m=0;
int total=0;
int num=0;
int select=0;
int* p;
//获取输入值
printf("%s","Input N and M\n");
scanf_s("%d %d",&n,&m);
if (0==n || 0 ==m)
{
printf("%s","input n or m Error\n");
return 0;
}
//建立数组
p=(int *)malloc(sizeof(int)*n);
for (int i = 0; i < n; i++)
{
p[i] = i+1;
}
//开始循环判断
while (total <= n)
{
//遍历至m处
for (int i = 0; i < n; i++)
{
if ( 0 != p[i])
{
num++;
}
if(m == num)
{
printf("%d\n",p[i]);
total++;
num=0;
p[i] =0;
//break;
}
}
}
system("pause");
}