堆里有 16 颗豆子,有两个玩家(假设一个玩家是电脑) 。每个玩家都可以从堆中的 16 颗豆子中取出 1 颗, 2 颗或者 3 颗豆子。每个玩家在每回合中必须从堆中取出一定数目的豆子。玩家轮流取出豆子,取到最后 一颗豆子的玩家是输家。 思路: 写一个人取豆子的函数 ; 帮电脑设计一个算法,实现取豆子的函数 ; 在主程序中进行输流调用,谁 最后拿到 1 粒豆子谁就输。
时间: 2024-02-24 09:59:00 浏览: 8
好的,下面是代码实现:
```c
#include <stdio.h>
// 人取豆子的函数
int humanTakeBeans(int beans){
int take;
printf("请你输入你要取的豆子数(1、2、3):");
scanf("%d", &take);
while(take < 1 || take > 3 || take > beans){
printf("输入错误,请重新输入:");
scanf("%d", &take);
}
return take;
}
// 电脑取豆子的函数
int computerTakeBeans(int beans){
int take;
if(beans == 1){
take = 1;
}else if(beans == 2){
take = 2;
}else if(beans == 3){
take = 3;
}else{
take = (rand() % 3) + 1;
if(take > beans){
take = beans;
}
}
printf("电脑取了 %d 颗豆子。\n", take);
return take;
}
int main(){
int beans = 16;
int turn = 1;
int take;
while(beans > 0){
printf("第 %d 轮:\n", turn);
if(turn % 2 == 1){ // 人取豆子
take = humanTakeBeans(beans);
}else{ // 电脑取豆子
take = computerTakeBeans(beans);
}
beans -= take; // 更新剩余豆子数
printf("剩余豆子数:%d\n\n", beans);
turn++; // 轮换
}
if(turn % 2 == 1){
printf("你输了!\n");
}else{
printf("电脑输了!\n");
}
return 0;
}
```
这段代码实现了游戏的整个流程,其中人取豆子的函数 `humanTakeBeans()` 中,通过输入来获取人类玩家所取的豆子数,并对输入进行了校验,保证输入的合法性;电脑取豆子的函数 `computerTakeBeans()` 中,电脑会根据一定的算法来取豆子,当剩余豆子数为1、2或3时,电脑就直接取完,否则就随机取1、2或3颗豆子。最后在主程序中实现了游戏的整个流程,直到豆子数为0为止,最后输出输赢的结果。
希望对您有所帮助!
阅读全文