数日前に、このスードクパズルのランダムボックスを生成する方法について質問を投稿しました。今私はそれの境界線を生成することに困難があります。それは次のようになります: スードクパズルの境界線を作成する
しかし、私はそれを行うためのコードを考え出すことができません。問題は、行0から8までがスドク数で占められていることです。それらを '|'にする方法はわかりません。それらの数字の間に「 - 」文字を、また私が推測する境界線にも文字があります。
#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 = -1;
}
}
}
for (int i = 0; i <= 9; i++)
{
if (i == 0)
{
for (i = 1; i <= 27; i++)
{
printf("-");
}
printf("\n");
}
}
for (int j = 0; j <= 9; j++)
{
if (j == 0)
{
for (int i = 1; i <= 9; i++)
{
printf("|");
printf("\n");
}
}
}
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;
}
そして、ここでは私の実行トレースです:
Enter percentage of empty squares: 50
---------------------------
|
|
|
|
|
|
|
|
|
1 3 4 5 7 8 9
4 5 8 9 2
8 3 4 5
2 3 6 7 1
8 2 4
2 4 5 7
3 5 6 2
8 9 2 4 5
9 1 2 3
------------------
(program exited with code: 0)
私は本当にこの問題を解決する方法がわからない。ここ
は、私がこれまで試したものです。数字を印刷するときにスペースを追加すると、辺の境界線を印刷するのに十分なスペースがあるはずですが、そうは思われません。誰でも助けてくれますか?ありがとう!
編集:ありがとうございました。ない正確に絵のように、私は以下近いものでそれを来て、きましたけれども、私の改善のコードです:
for (int i = 0; i <= n*n; i++)
{
if (i == 9)
{
for (int x =0; x <= 30; x++)
{
printf("-");
}
printf("\n");
break;
}
if (i == 0 || i == 3 || i == 6)
{
for (int x =0; x <= 30; x++)
{
printf("-");
}
printf("\n");
}
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')
{
if (check == '1' && (j == 0 || j == 3 || j == 6))
{
printf("| ");
}
else if (check == '1' && j == 8)
{
printf(" |");
}
else
{
printf(" ");
}
}
else
{
if (j == 0 || j == 3 || j == 6)
{
printf("|%2d ",(i*n + i/n + j) % (n*n) + 1);
}
else if (check == '0' && j == 8)
{
printf("%2d |",(i*n + i/n + j) % (n*n) + 1);
}
else
{
printf("%2d ",(i*n + i/n + j) % (n*n) + 1);
}
}
}
printf("\n");
}
だけ更新し、私も提案されたすべての改善により行きますよ!
あなたのプログラムがで**あなたが印刷することを指示し、すべてを印刷しますあなたはそれを伝えてください**。ですから、あなたがあなたのボードを印刷する前に '| \ n' **を印刷するループを持っていれば、自然にこれが出力されます。 – StoryTeller
ここでのトリックは、一度に行全体を印刷する必要があることを認識することです。すべての左側面を印刷してから、すべての数値を印刷し、次に右側のバーを印刷することはできません。代わりに、(それは決して変更されない)上部を印刷し、 'printf'ステートメントを使用して行を数字で印刷します。あなたはそれを知っていれば文字として数字を入力してください。 –
ならばああなるほど。だから、境界線を別々に印刷することはできません。 –