若有数组a[10],想要不断循环查找,只需用i=i%10。若想把数组中某个元素排除,只需给它赋一个特殊值, 如 :-1。
例:约瑟夫问题(33个犯人)
源代码:
#include<stdio.h>
#define all 33
int main()
{
int i = 0, j = 1, n = all, k;
printf("输入每次杀掉第n个犯人,n=");
scanf("%d", &k);
printf("每次杀掉的犯人的序号是\n");
int fan[all] = { 0 };
while (n > 0)
{
i = i % all; //当i大于all时,又从头开始数
if (fan[i] == -1)
i++;
else
{
if (j == k) //每数k个犯人就杀死
{
printf("%d\n", i + 1);
fan[i] = -1; //将“被杀死”的犯人赋值-1,作为标记,之后读到-1就跳过
i++;
j = 1;
n--; //每杀死一个犯人就把犯人数减1
}
else
{
i++;
j++;
}
}
}
return 0;
}