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

基于ASCII编码实现井字棋胜负判定的重叠性疑问

char choice, a = 'a', b = 'b', c = 'c', d = 'd', e = 'e', f = 'f', g = 'g', h = 'h', i = 'i';

if (a+b+c == 264 || d+e+f == 264 || g+h+i == 264 || a+d+g == 264 || b+e+h == 264 || c+f+i == 264 || a+e+i == 264 || c+e+g == 264) {
            finish = true;
            cout << "p1 win" << endl;
}
else if (a+b+c == 237 || d+e+f == 237 || g+h+i == 237 || a+d+g == 237 || b+e+h == 237 || c+f+i == 237 || a+e+i == 237 || c+e+g == 237) {
            finish = true;
            cout << "p2 win" << endl;
}

问题:

我采用ASCII编码计算的方式判定井字棋游戏中玩家1或玩家2的胜负。请问该判定逻辑中的求和结果是否存在与其他情况重叠的可能性?


分析结论

你的判定逻辑里的求和结果不会和其他情况重叠,具体原因如下:

  1. 核心逻辑对应关系:
    • 264是三个大写X的ASCII值之和(88×3=264),对应玩家1获胜;
    • 237是三个大写O的ASCII值之和(79×3=237),对应玩家2获胜。
  2. 井字棋的合法棋子只有X和O两种,初始的小写字母a-i(ASCII 97-105)会被下棋操作替换,不会留在棋盘上。所有可能的三棋子组合的和都是唯一的:
    • 三个X:264
    • 三个O:237
    • 两个X+一个O:88×2+79=255
    • 两个O+一个X:79×2+88=246
      这四个数值互不重复,不存在非获胜组合的和等于264或237的情况。
  3. 退一步说,即使有未被替换的初始小写字母,其ASCII值远大于X和O,任意三个小写字母的和最小为97×3=291,远大于264;混合小写字母与X/O的和也只会落在246-291区间内,同样不会等于264或237。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 12:26:32