#include <stdlib.h>
#include <stdio.h>
#include "dead_live.h"
/*
* n: 总共人数
* m: 数到几
* x: 数到几死
* l: 最后剩下几个
* 例子:一共n=10个人 数到m=9 数到x=3 的死亡 最后剩下l=1个人
*/
void dead_game(int n, int m, int x, int l){
int index; // 下标
int num = 0; // 报数值
const int DEAD = 1;
int *death; //人的状态
int amount = 0; //死亡数
death = (int *)malloc(sizeof(int) * n);
// 配置全是 生
for (index=0; index < n; index ++){
death[index] = 0;
}
index = 0;
while(amount != n-l){
// 重置队列
if (index == n){
index = 0;
}
// 重置报数
if (num == m + 1){
num = 1;
}
// 没死就报数,判断是否死
if (death[index] != DEAD){
num ++;
if (num == x){
death[index] = 1;
amount ++;
printf("%d people is dead\n", index + 1);
}
}
// 死不死 都得往后推进判断
index ++;
}
for(index=0; index < n; index ++){
if (death[index] == 0){
printf("%d people live at last\n", index+1);
}
}
free(death);
}
约瑟夫环问题
最新推荐文章于 2020-12-12 20:54:11 发布