一、取火柴游戏算法:
取火柴游戏是一个非常简单有趣的小游戏,只要计算好步骤就可以做到常胜将军;
- 基本规则:总共有n根火柴,每人每次最多能取4根,最少取1根火柴,谁取到最后一根火柴就算输。
- 关键:当火柴少于等于5根的时候,只要把火柴取为剩下一根就可以保证对方输(这里只给出随机取火柴,最后小于5时取剩余数减1根火柴的代码)。
二、C/C++实现代码:
1、模拟两个人随机取火柴:
/************************/
/* name: match.c */
/* auth: tianmt */
/* desc: Match play */
/************************/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define random(min, max) ((rand()%(max-min+1))+(min))
const char * takeMatch(int num, const char *g1, const char *g2){
int times = 0, rand_num = 0;
srand(time(NULL));
while(num > 0){
//printf("remian matches: %d\n", num);
if(1 == num)
break;
if(num <= 5)
rand_num = num - 1;
else
rand_num = random(1, 4);
//printf("rand: %d\n", rand_num);
num -= rand_num;
times++;
}
if(1 == times%2)
return g1;
else
return g2;
}
int main(int argc, char **argv){
if(argc != 2){
printf("Usage: %s num\n", argv[0]);
return -1;
}
const char gamer1[] = "Tom", gamer2[] = "Jack";
printf("WINNER: %s\n", takeMatch(atoi(argv[1]), gamer1 ,gamer2));
return 0;
}
运行结果:

2、电脑随机取火柴,用户输入取火柴:
/****************************/
/* name: match_computer.c */
/* auth: tianmt */
/* desc: Match play */
/****************************/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define random(min, max) ((rand()%(max-min+1))+(min))
void takeMatch(int num){
int take_num = 0, rand_num = 0;
srand(time(NULL));
while(1){
printf("remian matches: %d\n", num);
printf("YOU take matches:\n");
scanf("%d", &take_num);
if(take_num<1 || take_num>4 || take_num>(num-1)){
printf("take error num, please take again\n");
continue;
}
num -= take_num;
if(1 == num){
printf("YOU WIN!\n");
break;
}
if(num <= 5){
rand_num = num - 1;
printf("COMPUTER WIN!\n");
break;
}
else
rand_num = random(1, 4);
printf("COMPUTER takes %d matches!\n", rand_num);
num -= rand_num;
}
}
int main(int argc, char **argv){
if(argc != 2){
printf("Usage: %s num\n", argv[0]);
return -1;
}
takeMatch(atoi(argv[1]));
return 0;
}
运行结果

—— 2018-11-29 ——
本文介绍了一种简单的取火柴游戏算法,其中包含关键策略以确保胜利。游戏规则为双方轮流从总数中取走1至4根火柴,目标是避免取走最后一根。文章提供了两种C/C++实现方式,包括两人随机取火柴的模拟及用户与电脑的对战。
1019

被折叠的 条评论
为什么被折叠?



