一応これで求まるのですが、for文を使いまくっていて、非常に汚いプログラムになってしまいました。
そして、実行にかなり時間がかかってしまいます。
再帰を使えばもっとすっきりすると思うんですが、どうやればいいか分かりません。
どうすればいいでしょうか。
以下にソースを載せます。
#include <stdio.h>
int main(void) {
int i, j, k, l, m, n, o, p, q;
int x;
int a, b, c;
int data[9];
for (i=1; i<=9; i++) {
data[0] = i;
for (j=1; j<=9; j++) {
data[1] = j;
for (k=1; k<=9; k++) {
data[2] = k;
for (l=1; l<=9; l++) {
data[3] = l;
for (m=1; m<=9; m++) {
data[4] = m;
for (n=1; n<=9; n++) {
data[5] = n;
for (o=1; o<=9; o++) {
data[6] = o;
for (p=1; p<=9; p++) {
data[7] = p;
for (q=1; q<=9; q++) {
data[8] = q;
c = 0;
for (a=0; a<9; a++) {
for (b=a+1; b<9; b++) {
if (data[a] == data)
c++;
}
}
if (c == 0) {
if ((data[0] + data[1] + data[2]) ==
(data[3] + data[4] + data[5]) &&
(data[0] + data[1] + data[2]) ==
(data[6] + data[7] + data[8]) &&
(data[0] + data[1] + data[2]) ==
(data[0] + data[3] + data[6]) &&
(data[0] + data[1] + data[2]) ==
(data[1] + data[4] + data[7]) &&
(data[0] + data[1] + data[2]) ==
(data[2] + data[5] + data[8]) &&
(data[0] + data[1] + data[2]) ==
(data[0] + data[4] + data[8]) &&
(data[0] + data[1] + data[2]) ==
(data[2] + data[4] + data[6]))
{
for (x=0; x<9; x++) {
printf("%2d", data[x]);
if (x == 2 || x == 5 || x == 8)
puts("");
}
puts("");
}
}
}
}
}
}
}
}
}
}
}
printf("以上\n");
return 0;
}
よろしくお願いします。