以下のプログラムは隣同士の数字の差を下の段に表示しています。
決まりで同じ数字は一度しか使えません。
上記のプログラムの結果を表示していますが、最後の出力結果の前にある以下の文の行ってる意味が分かりません。
for (i = 1; i < 16; i++){ //配列c[]を0に初期化//
check[i] = 0;
}
for (i = 1; (i < 16) && (check[n[i]] == 0); i++){ //1から15以内でcheck[n[i]が0になるまで//
check[n[i]] = 1; //c[n[i]]に1を代入//
}
if (i < 16) continue;
上記の処理を行うことで、なぜ同じ数字を使ってない結果を表示することが出来るのでしょうか?
教えていただけないでしょうか?
#include <stdio.h>
int main(void)
{
int i,j,x,t;
int n[16];
int check[16];
for (n[1] = 1; n[1] <= 15; n[1]++) {
for (n[2] = 1; n[2] <= 15; n[2]++) {
for (n[3] = 1; n[3] <= 15; n[3]++) {
for (n[4] = 1; n[4] <= 15; n[4]++) {
for (n[5] = 1; n[5] <= 15; n[5]++) {
n[6] = (n[1] - n[2]);
if(n[6] < 0){
n[6] = -n[6];
}
n[7] = (n[2] - n[3]);
if(n[7] < 0){
n[7] = -n[7];
}
n[8] = (n[3] - n[4]);
if(n[8] < 0){
n[8] = -n[8];
}
n[9] = (n[4] - n[5]);
if(n[9] < 0){
n[9] = -n[9];
}
n[10] = (n[6] - n[7]);
if(n[10] < 0){
n[10] = -n[10];
}
n[11] = (n[7] - n[8]);
if(n[11] < 0){
n[11] = -n[11];
}
n[12] = (n[8] - n[9]);
if(n[12] < 0){
n[12] = -n[12];
}
n[13] = (n[10] - n[11]);
if(n[13] < 0){
n[13] = -n[13];
}
n[14] = (n[11] - n[12]);
if(n[14] < 0){
n[14] = -n[14];
}
n[15] = (n[13] - n[14]);
if(n[15] < 0){
n[15] = -n[15];
}
for (i = 1; i < 16; i++){ //配列c[]を0に初期化//
check[i] = 0;
}
for (i = 1; (i < 16) && (check[n[i]] == 0); i++){ //1から15以内でcheck[n[i]が0になるまで//
check[n[i]] = 1; //c[n[i]]に1を代入//
}
if (i < 16) continue;
printf("%2d %2d %2d %2d %2d\n", n[1], n[2], n[3], n[4], n[5]);
printf(" %2d %2d %2d %2d\n", n[6], n[7], n[8], n[9]);
printf(" %2d %2d %2d\n", n[10], n[11], n[12]);
printf(" %2d %2d\n", n[13], n[14]);
printf(" %2d\n", n[15]);
printf("\n");
}
}
}
}
}
return 0;
}