【问题标题】:Finding the indexes of an element of 9x9 array that is divided into nine 3x3 arrays查找被分成九个 3x3 数组的 9x9 数组的元素的索引
【发布时间】:2016-12-17 07:29:16
【问题描述】:

为了创建一个终极井字游戏,其中包括一个 9x9 阵列,该阵列分为九个 3x3 子阵列。

每个子数组按以下方式编号:

我想创建一个函数,例如,如果用户输入两个参数,它会转到 9x9 矩阵中的单元格,(或返回索引)。

例如,如果我输入 2,2:我进入第二个 3x3 矩阵,然后进入第二个单元格,这意味着我最终进入了 9x9 矩阵中的单元格 [0,4]。

我正在用 C 语言编写代码。 我最终得到的只是制作一个包含许多循环的大函数,将我直接带到想要的单元格,但我认为它太多了,我很乐意有一种更简单的方法来做到这一点。

有什么想法吗?

以下代码只是我所做工作的开始。 我将 9x9 矩阵分为三列,每次我根据用户为子数组选择的 1-9 的数字处理一列,然后从那里我转到每个子数组的一系列函数以找到合适的地方。太复杂太长了,这就是我的代码的问题。这就是我寻找替代方案的原因。

int Insert_Move(char player, char GameBoard[Lines][Columns], int chosen_pos,
                int next_subboard)

{
    if(next_subboard == 3 || next_subboard == 6 || next_subboard == 9)
        return First_Column_9x9(player, GameBoard, chosen_pos, next_subboard);

    if(next_subboard == 2 || next_subboard == 5 || next_subboard == 8)
        return  Second_Column_9x9(player, GameBoard, chosen_pos, next_subboard);

    if(next_subboard == 1 || next_subboard == 4 || next_subboard == 7)
        return Third_Column_9x9(player, GameBoard, chosen_pos, next_subboard);

    return 1; /* Success */
}

【问题讨论】:

  • 请发布您尝试过的代码并指出您遇到问题的地方。
  • a) 向我们展示您到目前为止所做的事情 b) 不是 C 专家,但我认为:使用 3x3 对象数组,每个对象都是 3x3array,然后我认为您可以访问 2 维数组作为向量,因此通过给出 2,2 你可以获得第二个(3x3 数组)对象,使用第二个数字 (2) 你将获得实际的单元格
  • 我做到了。我正在寻找一个简单的算法,这只是数学,但无法掌握正确的公式。

标签: c


【解决方案1】:

在二维数组中为:

X坐标=((p1-1)℅3)*3 + (p2-1)℅3;

Y坐标 = ((p1-1)/3)*3 + (p2-1)/3;

【讨论】:

  • 例如,我检查了 6,5,我应该得到 X=4,Y=7,但它不起作用
  • 请同时发送它的输出
【解决方案2】:

这是一个函数,它采用一个包含两个 size_t 值的数组来存储单元格的索引,以及用户给出的两个位置参数。它在一个零索引的 3X3 数组中找到给定位置的索引,然后将这些结果组合以生成 9X9 数组中的索引。

我把它放在一个小程序中来测试几个输入:

#include <stdio.h>

void get_index(size_t indices[2], int pos, int sub_board);

int main(void)
{
    size_t indices[2];
    int pos, sub_board;

    pos = 2;
    sub_board = 2;

    get_index(indices, pos, sub_board);

    printf("Cell indices are: [%zu][%zu]\n", indices[0], indices[1]);

    pos = 6;
    sub_board = 9;

    get_index(indices, pos, sub_board);

    printf("Cell indices are: [%zu][%zu]\n", indices[0], indices[1]);    

    return 0;
}

void get_index(size_t indices[2], int pos, int sub_board)
{
    size_t row_pos, col_pos;
    size_t row_sub, col_sub;

    row_pos = (pos - 1) / 3;
    col_pos = (pos - 1) % 3;
    row_sub = (sub_board - 1) / 3;
    col_sub = (sub_board - 1) % 3;

    indices[0] = 3 * row_sub + row_pos;    
    indices[1] = 3 * col_sub + col_pos;

}

输出:

Cell indices are: [0][4]
Cell indices are: [7][8]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-09
    • 2014-11-15
    • 2019-03-07
    • 1970-01-01
    • 2013-08-26
    • 2019-07-12
    • 2015-08-19
    相关资源
    最近更新 更多