You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何优化Nim游戏中多分支if语句的代码实现?

如何简化Nim游戏中电脑取火柴的多if语句?

我写了一段Nim游戏的C语言代码,用来处理电脑取火柴的逻辑:

if (gepakteLucifers == 1) {
    printf("De computer pakt 3 lucifers\n");
    printf("%d - %d = %d\n\n", lucifers, 3, lucifers - 3);
    lucifers = lucifers - 3;
}
if (gepakteLucifers == 2) {
    printf("De computer pakt 2 lucifers\n");
    printf("%d - %d = %d\n\n", lucifers, 2, lucifers - 2); 
    lucifers = lucifers - 2;
}
if (gepakteLucifers == 3) {
    printf("De computer pakt 1 lucifer\n");
    printf("%d - %d = %d\n\n", lucifers, 1, lucifers - 1); 
    lucifers = lucifers - 1;
}

这段代码的逻辑是:玩家拿1根,电脑拿3根;玩家拿2根,电脑拿2根;玩家拿3根,电脑拿1根。但现在用了三个独立的if语句,感觉冗余太多,想简化这段代码。


你可以利用规则里的固定总和来简化:玩家和电脑每次拿的火柴总数是4(1+3=4,2+2=4,3+1=4),所以可以直接计算电脑需要拿的数量,把三个分支合并成一个逻辑:

int computer_takes = 4 - gepakteLucifers;
// 处理输出文本的单复数
printf("De computer pakt %d %s\n", computer_takes, computer_takes == 1 ? "lucifer" : "lucifers");
printf("%d - %d = %d\n\n", lucifers, computer_takes, lucifers - computer_takes);
lucifers -= computer_takes;

这样做的好处:

  • 去掉了重复的判断、输出和变量更新逻辑,代码更简洁易维护
  • 如果后续规则调整(比如总和改成5),只需要修改一个数字即可,不用改动多个分支
  • 自动处理了输出文本的单复数问题,和原代码的表述保持一致

另外补充一点:原代码里的三个if是独立判断,即使第一个条件满足,后面的if还是会执行判断,改成if-else if结构也能减少不必要的判断,但显然利用数学规律的简化方式效果最优。

内容的提问来源于stack exchange,提问作者quiana

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 19:55:16