-
游戏简述
终端输入参与的人数:7,依次编号为1,2,3,4,5,6,7,大家围成一圈,输入死亡编号:3,凡是报到3的人死亡,剩下的人继续报数,问最后活着的人的编号是多少?
-
程序运行效果
-
解题思路
首先对参与人数依次进行编号,并且储存在数组中,然后再进行报数,报到死亡号码时对应元素的值变为-1(表示死亡),记录总的死亡人数,当死亡人数与参与人数之差为1时,游戏结束,数组中不为-1的元素值即为最后活着的人的编号。
-
代码实现
#include <stdio.h>
//利用宏定义给死亡状态赋值
#define KILLED -1
int main(int argc, const char * argv[]) {
/*
杀人游戏/数字游戏
终端输入参与的人数:7
1 2 3 4 5 6 7
大家围成一圈
请输入死亡编号:3
凡是报道3的人都死亡 后面的人继续数数
输出最后一个活着的人的编号
*/
int total = 0; //总人数
int killNumber; //被杀死的人的编号
int number[100] = {}; //存放每个人的编号
int totalKillNumber = 0;//记录被杀掉的人数
int count = 0; //用来报数
printf("请输入参与游戏的人数:\n");
scanf("%d",&total);
printf("请输入被杀掉的人的编号:\n");
scanf("%d",&killNumber);
//给每个人编号
for (int i = 0; i < total; i++) {
number[i] = i + 1;
}
//游戏开始
for (int i = 0; i < total; i ++) {
if (number[i] != KILLED) {
//开始报数
count++;
}
//判断当前号码是否到了死亡号码
if (count == killNumber) {
//报到杀死编号的赋值为KILLED
number[i] = KILLED;
//杀死人数+1
totalKillNumber++;
//count还原
count = 0;
//当总杀人数为total-1时跳出循环
if (totalKillNumber == total-1) {
break;
}
}
//当i为最后一个时,i还原
if (i == total - 1) {
//最后执行i++,因此i=-1
i = -1;
}
}
//输出最后一个活着的人的编号
for (int i = 0; i < total; i++) {
if (number[i] != KILLED) {
printf("最后一个人的编号为:%d\n",number[i]);
}
}
return 0;
}
注意:
- 在合适的条件下对count与i的值进行还原
- 跳出循环的条件的判断
-
心得体会
虽然是一个挺简单的小demo,却也学到了很多,在一些细节方面有了更好的把握 ,尤其是for循环和while循环的运用,以及对跳出循环条件的判断。总的来说,收获满满,革命尚未成功,同志仍需努力!!
网友评论