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

数独问题行/列之和背后的逻辑

陈斌蔚
2023-03-14

我在练习数组,为了编写数独棋盘程序,我必须检查9x9矩阵的行和列的总和。

假设矩阵是9x9,那么每行/每列的总和必须是45,数独才能有效。

最简单的方法是这样做:

/*example for rows*/
for(column=0;column<9;column++){
sum0=sum0+sudoku[0][column];
sum1=sum1+sudoku[1][column];
sum2=sum2+sudoku[2][column];
sum3=sum3+sudoku[3][column];
...
/*repeat for all 9 sums and then simply check if one of the sums is != from 45

我不喜欢这个代码,因为它只适用于这个9x9固定大小的数独。我想做的是将sum的索引与行的索引链接起来;也许使用数组。

例如:

int sum[9];
for(column=0;column<9;column++){
sum[row]=sum[row]+sudoku[row][column]

其想法是,在增加行的索引之前,必须检查所有列,但我无法找出执行此操作的循环。此外,如果在检查完所有列后,总和为=45无需检查其他行,因为数独无效。

这可以通过以下简单代码实现:

if(sum[row]!=45){
fail_flag=1;
}
/*then stop the loop and return fail_flag*/

这种解决问题的方法正确吗?有没有关于如何设置我解释的循环的建议?

共有2个答案

梁丘伟
2023-03-14

这个想法是,在增加行的索引之前,必须检查所有列,但我无法找出这样做的循环。

您可以使用嵌套的for循环实现此功能,如下所示:

const int sudokuSize = 9
int sum[9];

int row, col;
for (row = 0; row < sudokuSize; row++) {
    for (col = 0; col < sudokuSize; col++) {
        sum[row] = sum[row] + sudoku[row][column]
    }
    if (sum[row] != 45) {
        fail_flag = 1;
        break;
    }
}

然而,对于验证数独立方体来说,这是不够的。您需要通过检查每行和每列中所有数字(0-9)的出现情况来改进逻辑

通迪
2023-03-14

检查行和列的紧凑方法可以是:

// First check lines
for(int line=0;line<9;line++){
  int sum=0;
  for(int column=0;column<9;column++){
    sum+=sudoku[line][column];
  }
  if(sum!=45){
   fail_flag=1;
   //Break will exit the loop
   break;
  }
}

// Then check column
if(fail_flag==0){
  for(int column=0;column<9;column++){
    int sum=0;
    for(int line=0;line<9;line++){
      sum+=sudoku[line][column];
    }
    if(sum!=45){
     fail_flag=1;
     //Break will exit the loop
     break;
    }
  }
}

然而,在数独游戏的情况下,检查总和是不够的,例如,如果你在网格中的每一行/每一列填入5,你将得到45。

 类似资料:
  • 我想用for循环写一个代码,但我无法得到背后的逻辑。有人能帮助我在这个代码问题:问题的图片

  • 问题内容: 我正在使用JWT保护节点js URL https://github.com/auth0/express- jwt 要创建JWT令牌用户会话,我只需执行以下操作: 或在登录电话的情况下 每次调用受保护的URL时,我都会检查JWT中间件是否自动设置了该URL 。 现在我想知道: 1-调用sign()时,JWT令牌存储在哪里? 2-每次调用受保护的网址时,我都必须验证()令牌吗?如果是,为什

  • 我刚刚下载了Maven,并尝试运行“Maven in Five minutes”页面(http://Maven.apache.org/guides/getting-start/maven-in-five-minutes.html)上的简单命令。这是命令: 当我运行它时,我得到一个SSL证书错误,无法从https://repo.Maven.apache.org/maven2的中央Maven存储库下载

  • 我正试图从现实中解决一个问题 “偶数总和” 但是我不能这样做。下面是问题。 即使是总和也是两个玩家的游戏。玩家将获得N个正整数序列并轮流进行。在每个回合中,玩家选择一个非空切片(连续元素的子序列),使得该切片中的值之和是偶数,然后删除切片并连接序列的其余部分。第一个无法做出合法举动的玩家将输掉比赛。 如果你和你的对手玩这场游戏,你想知道你是否能赢,假设你和对手都玩得很好。你先走。 写一个函数:

  • 我正在查看Apache POI来解析一些Excel文件。到目前为止,我可以看到有HSSF*类可以处理xls,XSSF*可以处理xlsx文件。 我需要从工作簿的第一个工作表中读取一些相当复杂的数据模式。 所以问题是:我是否必须为xls和xlsx格式编写两次相同的逻辑,或者我可以以更通用的方式使用这两种格式?

  • 由于缺乏信息,我在这里锁定了最后一个问题,现在我将尝试进一步解释,以消除混淆。 好的,先离开,获取一些关于我正在做什么的背景信息<我开始了一个制作数独游戏的个人项目,学习面向对象编程、数组列表、算法、模型/控制/设计层,并扩展我的编程知识<我在制作这个游戏方面已经走了很长的路,它即将完成,但我遇到了一个需要帮助解决的小问题。 当我生成3个数独,一个简单,一个中等和一个困难时,我遇到了问题。 简单和