我需要想出一个程序,它生成x%的正方形,在9x9数独方块中是空白的,其中x由用户决定。要在正方形中打印的数字是预先确定的,并在问题中修复。
所以我提出了一些代码来做到这一点,但问题是它根本不起作用。我的想法是创建两个不同的数组,其中一个用于随机行,另一个用于随机列。
这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main ()
{
int column_random [81], row_random [81], n = 3, k, j, input, number;
char check = '0';
printf("Enter percentage of empty squares: ");
scanf("%d", &input);
srand ( time ( NULL) );
number = (input * 81) / 100 ;
for ( k = 0; k < number; k++ )
{
row_random [k] = rand () % 9 ;
column_random [k] = rand () % 9 ;
for ( j = 0; j < k; j++ )
{
if ( row_random [j] == row_random [k] && column_random [j] == column_random [k] )
{
row_random [k] = rand () % 9 ;
column_random [k] = rand () % 9 ;
j = 0;
}
}
}
for ( int i = 0; i < n*n; i++ )
{
for ( int j = 0; j < n*n; j++ )
{
for ( k = 0; k < number; k++ )
{
check = '0';
if ( j == column_random [k] && i == row_random [k] )
{
check = '1';
break;
}
else
{
check = '0';
}
}
if ( check == '1' )
{
printf(" ");
}
else
{
printf("%d ",(i*n + i/n + j) % (n*n) + 1);
}
}
printf("\n");
}
return 0;
}
有谁能告诉我我的代码有什么问题?或者如果我的想法/概念是错误的? 谢谢!
答案 0 :(得分:1)
number = ( input / 100 ) * 81;
,0 <= input < 100
为0,因为整数除法的结果会被截断
请改为number = input * 81 / 100;
。row_random [k] = rand () % 9;
和column_random [k] = rand () % 9;
row_random
和column_random
的最后一个元素才有效,因为只要条件'0'
为假,就会check
分配给j == column_random [k] && i == row_random [k]
。
在循环check = '0';
之前移动for ( k = 0; k < number; k++ )
。check
的未初始化变量的值来调用未定义的行为,这在number = 0
时是不确定的。
声明时初始化check
。check == '0'
)打印两个字符,但只为空格(check == '1'
)打印一个字符,因此格式将被破坏。这些更改会使行为更好,但空格数可能会少于预期,因为可能会选择重复的位置。 为避免这种情况,你应该
number
元素,并将它们用作转向空格的位置。