约瑟夫环(用简单的C)
---------
题目:有n个人围成一圈,顺序排号,从第一个开始报数(从1到7报数),凡报到7的人退出圈子,问最后最后留下的是原来第几号的那位?
#include <stdio.h>
int func(int *a)
{
int i;
int sum = 0;
for(i = 0; i < 30; i++)
{
if(a[i] == 1)
{
sum++;
}
}
return sum;
}
int main()
{
int a[30]; //把30个人编成一个数组
int i;
int count = 0;
int sum = 0;
for(i = 0;i < 30;i++)
{
a[i] = 1; //把每个人编号为“1”
}
while(func(a) > 1)
{
for(i = 0;i < 30;i++)
{
if(a[i] == 1)
count++;
if(count % 7 == 0) 把叫到7的人编为“0”
a[i] = 0;
}
}
for(i = 0 ;i < 30; i++)
{
if(a[i] == 1)
{
printf("%d\n",i+1); //打印出留下最后一个人的编号
}
}
return 0;
}