假设现在有9999张牌,两个人去拿,每次可以拿1-5张牌,从你开始拿,要保证自己拿到最后一张牌,请设计c语言代码算法
时间: 2024-03-14 19:46:51 浏览: 15
好的,以下是一种可以保证自己拿到最后一张牌的 C 语言代码算法:
```c
#include <stdio.h>
int main() {
int cards = 9999; // 初始牌数
int take; // 每次拿的牌数
// 循环直到只剩一张牌
while (cards > 1) {
// 你的策略:使每轮牌数总和为6
if (cards % 6 == 0 || cards % 6 == 1) {
take = 1; // 保证你拿到最后一张牌
} else if (cards % 6 == 2 || cards % 6 == 3) {
take = 2;
} else {
take = 3;
}
// 显示拿牌信息
printf("你拿了 %d 张牌\n", take);
// 减去拿的牌数
cards -= take;
// 电脑的策略:使每轮牌数总和为6
if (cards % 6 == 0 || cards % 6 == 1) {
take = 1; // 保证你拿到最后一张牌
} else if (cards % 6 == 2 || cards % 6 == 3) {
take = 2;
} else {
take = 3;
}
// 显示拿牌信息
printf("电脑拿了 %d 张牌\n", take);
// 减去拿的牌数
cards -= take;
}
// 显示最终结果
printf("最后一张牌是你拿的!\n");
return 0;
}
```
这个算法中,你和对手的策略都是使每轮牌数总和为 6,这样就可以保证你在最后一轮拿到最后一张牌。具体来说,假设剩下的牌数为 x,你的策略是:
- 如果 x 除以 6 的余数是 0 或 1,那么拿 1 张牌,这样可以保证你在最后一轮拿到最后一张牌。
- 如果 x 除以 6 的余数是 2 或 3,那么拿 2 张牌。
- 如果 x 除以 6 的余数是 4 或 5,那么拿 3 张牌。
对手的策略和你的策略一样。