约瑟夫生者死者小游戏(适合多人娱乐的小游戏)
规则
输入玩家数量,自动编号。输入死亡编号,根据死亡编号杀人。每死亡一人,接着后面的人重新编号,继续按编号杀人。例如:
请输入参与人数: 7
1 2 3 4 5 6 7
请输入杀人的编号:3
请输入最后一个人的编号
1 2 3 4 5 6 7
3
1 2
这里用到了define,那么就来讲一讲define吧:
1.#define可以为类型定义别名。
#define INT int
2.#define不仅可以为类型定义别名,也可以为数值定义别名。为数值定义一个别名时,达到了定义一个常量的效果。
#define KILLED -1
3.使用#define的好处在于一方面加强了代码的可读性,另一方面是增强可操作性便于代码修改。(多处使用#define定义的别名时,别名对应的值需要修改时,可以直接在#define处快速修改。
#include <stdio.h>
#define KILLED -1 //宏定义(取别名)
int main(){
int num[50] = {}; //保存每个人的编号
int count = 0 ; //保存输入的人数
int killNum = 0; //被杀的人的编号
printf("请输入参与人数:");
scanf("%d", &count);
//开始编号
for(int i = 0; i < count; i++){
num[i] = i+1;//对每个人进行编号。
}
printf("请输入杀人的编号:");
scanf("%d", &killNum);
//开始游戏
int current = 0; //记录当前报数的位置
int totalKilled = 0; //记录当前死亡人数
for(int i = 0; i < count; i++){
//i指向的这个人开始报数
if(num[i] != KILLED){
current++;
}
//判断当前编号是不是死亡编号
if(current == killNum){
printf("死亡编号%d \n", num[i]);
//杀掉
num[i] = KILLED;
//还原
current = 0;
totalKilled++;
//当还剩一个的时候就退出循环
if(totalKilled == count-1){
break;
}
}
//判断是否到末尾了
if (i == count-1){
i = -1;
}
}
for(int i = 0; i < count; i++){
printf("%d ", num[i]);
}
return 0;
}
运行效果就是这样的:
image.png