当前位置: 首页 > 知识库问答 >
问题:

Tic Tac Toe确定胜利者算法

那博瀚
2023-03-14

我在C和一般编程方面是个新手,我想知道这段代码的性能/复杂性有多好,因为它与我在SO的其他帖子中发现的不同。for循环是否使这变得不必要的复杂?

if (game[1][3] == game[2][2] && game[2][2] == game[3][1]) /*antidiagonal check */
    {
        w = game[1][3]; /* w is player X or O */
    }

    t1 = 0;

    for (i=0; i<=2; ++i)
    {
        if (game[i][i] == game[i+1][i+1]) /* main diagonal check */
        {
            t1 += 1;
        }
            if (t1 == 2)
            {
                w = game[i][i];
            }
    }

    for (i=0; i<=2; ++i)
    {
        t2 = 0;
        for (j=0; j<=1; ++j)
        {
            if (game[i][j] == game[i][j+1]) /* row check */
            {
                t2 += 1;
                if (t2 == 2)
                {
                    w = game[i][j];
                }
            }
        }
    }

    for (i=0; i<=1; ++i)
    {
        t3=0;
        for (j=0; j<=2; ++j)
        {
            if (game[i][j] == game[i+1][j]) /* column check */
            {
                t3 += 1;
                if (t3 == 2)
                {
                    w = game[i][j];
                }
            }
        }
    }

    if (t1<2 && t2<2 && t3<3)
    {
        printf("No winner\n");
    }
    else
    {
        printf("%c wins\n", w);
    }

共有1个答案

党博超
2023-03-14

井字板有9块瓷砖。

每个平铺中要么有x,要么没有。这意味着您可以使用一个9位无符号整数来表示每个平铺是否有X;然后在(512条目)查找表中使用这个数字来确定X是否获胜。

以同样的方式;每个平铺中要么有O,要么没有;因此,您可以将其编码为不同的9位无符号整数,并在相同的(512项)查找表中使用它来确定OWON。

if( table[XboardState] == WIN) {
    printf("X wins\n");
} else if( table[OboardState] == WIN) {
    printf("O wins\n");
} else {
    printf("No winner\n");
}
 类似资料:
  • 问题内容: 表名称: series_type 表格名称: 匹配项 输出: 使用League_id,start_time,radiant_name和dire_name ex的 所需 过滤器 。 输出: 我已经尝试过 使用SERIES_ID和SUM分组,但结果不同。 前任。 询问 前任。 不想要的结果〜〜_ 更新感谢 此查询为我提供了正确的结果,但是有1个问题,它给出了2列。 我需要一排 matche

  • 我该怎么做? 下面是我的代码:

  • 我想这一定是一个简单的修复,但我仍然熟悉编码,所以偶尔我会陷入一些愚蠢的事情(会赶上的,最终哈哈) (我已经实现了所有其他可能获胜的行和列。没有将它们粘贴在这里以使问题更短,但它们都遵循上面的逻辑) 当玩家放置标记时,我调用该函数,一旦满足一个获胜条件,我会打印消息: 但游戏不会中断(我猜会是,因为我在每个条件后都“Rest”)。我的IF里面会发生什么?就像我说的,猜测一定很简单,但现在卡住了。

  • 主要内容:败者树实现内部归并,败者树内部归并的具体实现,总结通过上一节对于外部排序的介绍得知:对于 外部排序算法来说,其直接影响算法效率的因素为读写外存的次数,即次数越多,算法效率越低。若想提高算法的效率,即减少算法运行过程中读写外存的次数,可以增加 k –路平衡归并中的 k 值。 但是经过计算得知,如果毫无限度地增加 k 值,虽然会减少读写外存数据的次数,但会增加内部归并的时间,得不偿失。 例如在上节中,对于 10 个临时文件,当采用 2-路平衡归并时,

  • 我目前正在工作的一个分配的项目,以创造一个抽搐tac脚趾游戏在Java。这是我到目前为止,所有的代码工作相当好,游戏和它的功能工作非常好。我应该记录X胜、O胜和平局;然而,这似乎是问题所在。由于某种原因,即使我指定了计算机模拟的tic tac toe游戏应该有1000次迭代,x胜、o胜和平局加起来从来不是1000。它总是一个非常接近1000的数字,但我不知道为什么它总是变化。下面是我在main类中

  • 我们有一项任务来决定骰子游戏的最终赢家。以下是完整的规则: 在这个游戏中,你将与另外两个电脑玩家对决。有三轮。每轮开始时,一个玩家掷两个骰子。你那一轮掷骰子的总数加在你的点数上。你的积分总是从零开始。每连续一轮,积分加到总数上。第三轮结束时,谁的积分最多,谁就赢得比赛。 回溯(最近的调用):2:from rollem 2.rb:83:in'1:from rollem 2.rb:79:in play