一応これで求まるのですが、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; } よろしくお願いします。