今天我们来谈谈一个恐怖的杀人游戏!
需要用到
- define killed 0;一个宏定义(取别名)将0取别名为killed。目的 1. 增强可操作性 2. 增强阅读性
游戏说明(被杀(killed即0))
输入参与游戏的人数如5,就将这无人依次排好序1,2,3,4,5。然后输入要杀的人的编号如3,就将第三个人杀掉(为killed即0),从后一个数再从1开始数数到3又杀掉。数到最后又倒回来从第一个开始,被杀的虽然显示为0,但已经被杀所以数数的时候不计。如此直到最后剩下一个最后人。
例如
参与人数7
要杀的人2第1次剩下 : 1,0,3,4,5,6,7第2次剩下 : 1,0,3,0,5,6,7第3次剩下 : 1,0,3,0,5,0,7第4次剩下 : 0,0,3,0,5,0,7第5次剩下 : 0,0,3,0,0,0,7第6次剩下 : 0,0,0,0,0,0,7
所以最后存活下来的是第7个人。
代码如下:
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("%d ",num[i]) ;
}
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;
}
是不是非常有趣呢?