Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 遍历大小为[6][7]的数组对角线的方法_C_Arrays - Fatal编程技术网

C 遍历大小为[6][7]的数组对角线的方法

C 遍历大小为[6][7]的数组对角线的方法,c,arrays,C,Arrays,我正在用C语言构建一个名为“四人行”或“连接四人行”的游戏,您可以在这里看到该游戏的快速回顾: 因此,我有一个大小为[6][7]的二维数组,我想检查对角线中是否有4个“*”或“o”标记,它们被定义为一行中的字符。我试着写一个函数,在每次播放之后,它对所有可能的对角线求和,看看和是不是4,或者如果我们想成对检查,如果我们得到三个相似的对,那么一行中有4个相等的标记,所以在这种情况下,和是3,依此类推 据我所知,有12条不同的对角线(每6条在不同的方向上),你建议我如何在最有效的情况下编写这个函数

我正在用C语言构建一个名为“四人行”或“连接四人行”的游戏,您可以在这里看到该游戏的快速回顾:

因此,我有一个大小为[6][7]的二维数组,我想检查对角线中是否有4个“*”或“o”标记,它们被定义为一行中的字符。我试着写一个函数,在每次播放之后,它对所有可能的对角线求和,看看和是不是4,或者如果我们想成对检查,如果我们得到三个相似的对,那么一行中有4个相等的标记,所以在这种情况下,和是3,依此类推

据我所知,有12条不同的对角线(每6条在不同的方向上),你建议我如何在最有效的情况下编写这个函数?而且还包括所有可能的,少于16行的代码。 任何形式的帮助都将不胜感激

下面是我所做工作的一个例子:

int CheckDiagonal_1(char matrix[Rows][Columns])
{
    int s_count = 0;
    int o_count = 0;
    for(int i = 0; i < 4; i++)
    {
        for(int j = 5; j >= 3; j--)
        {
            for(int k = 0; k <= 3; k++)
            {
                if(matrix[j-k][i+k]== matrix[j-k-1][i+k+1]) count ++;
                if(count==4) return count;
            }
            count = 0;

        }
    }
    return 0;
}
int CheckDiagonal_1(字符矩阵[行][列])
{
int s_计数=0;
INTO_计数=0;
对于(int i=0;i<4;i++)
{
对于(int j=5;j>=3;j--)
{

对于(int k=0;k对角线是序列,其中

  • i==j+c
    用于i from(0,高度)和c(-width,height)
  • i==-j+c
所以,如果我们的目标是编写适合少量行的代码,只需编写遍历i{0-6}的循环,并检查索引是否适合范围

for (int c= -7; c < 7; c++)
{
  int starsOnDiag = 0;
  for(int i = 0; i < 7; i++)
  { 
     starsOnDiag += !indexesInRange(i, j) ? 0 :
         cell[i, i+c] == '*' ? 1 : 0;
  }
  ... // other diagonal and check for other symbol
 }
for(int c=-7;c<7;c++)
{
int starsOnDiag=0;
对于(int i=0;i<7;i++)
{ 
starsOnDiag+=!索引范围(i,j)?0:
单元[i,i+c]='*'?1:0;
}
…//其他对角线并检查是否有其他符号
}

@Jongware我想是一个
42
元素的数组…@Jongware我编辑过。它意味着6行7列。你自己尝试过解决这个问题吗?有代码要显示吗?是的,但我没有找到一个完整的解决方案,我会在几分钟内尝试放置一些东西。没有发布任何代码或试图通过o解决任何问题的家庭作业尝试内塞尔夫。