目前我在让我的代码工作时遇到了麻烦,它在为一个非插槽分配了一个新值之后检查了数独板,然后查看它的静止块是否有效。
目前,即使我输入了正确的输入,这段代码仍然告诉我我的块无效。
tempsudoku板基本上是一个数独板,0随机槽代表空白。有人可以看看我的代码是否有问题吗?
int truefalse=1;
printf("Enter a row (1-9), column (1-9) and number (1-9), separated by spaces: ");
scanf("%d %d %d", &row, &column, &number);
tempsudoku[row-1][column-1]=number;
for(i=0;i<=2;i++)
{
for(j=0;j<=2;j++)
{
int check[9]={0};
for(x=0;x<=(j*3)+2;x++)
{
for(y=0;y<=(i*3)+2;y++)
{
for(k=0;k<=8;k++)
{
if(tempsudoku[x][y]==k+1)
{
check[k]++;
}
}
}
}
for(k=0;k<=8;k++)
{
if(check[k]>=2)
{
printf("Error: repeats in board\n");
truefalse=0;//basically means its false
}
}
}
}
答案 0 :(得分:1)
for(x=0;x<=(j*3)+2;x++){
for(y=0;y<=(i*3)+2;y++){
应该是
for(x=3*j;x<=(j*3)+2;x++){
for(y=i*3;y<=(i*3)+2;y++){
循环遍历一个区块的九个单元格。
请注意,您可以简化
for(k=0;k<=8;k++){
if(tempsudoku[x][y]==k+1){
check[k]++;
}
}
到
k = tempsudoku[x][y];
if (k >= 1)
check[k-1]++;