プログラムの実行結果は以下の通り。
3 9 1 6 2 4 7 8 5
これを図示すると以下のようになる。

プログラムのソースは以下の通り。
#include "puzutl.h"
YesNo used[10];
int main( int argc, cstring argv[])
{
for( int a=1; a< 10; a++) {
used[a] = YES;
for( int b=1; b< 10; b++) {
if( used[b]) continue;
used[b] = YES;
for( int c=1; c< 10; c++) {
if( used[c]) continue;
used[c] = YES;
for( int d=1; d< 10; d++) {
if( used[d]) continue;
used[d] = YES;
for( int e=1; e< 10; e++) {
if( used[e]) continue;
used[e] = YES;
for( int f=1; f< 10; f++) {
if( used[f]) continue;
used[f] = YES;
for( int g=1; g< 10; g++) {
if( used[g]) continue;
used[g] = YES;
for( int h=1; h< 10; h++) {
if( used[h]) continue;
used[h] = YES;
for( int i=1; i< 10; i++) {
if( used[i]) continue;
used[i] = YES;
int x[] = { a+b+c,
d+e+f,
g+h,
a+d+g,
b+e,
c+f+h,
a+i+e,
c+e+g};
int n = sizeof(x)/sizeof(x[0]);
YesNo eq = YES;
for( int k=1; k< n; k++) {
if( x[0] != x[k]) { eq = NO; break; }
}
if( eq) {
ps( "%d %d %d\n", a, b, c);
ps( " %d\n", i);
ps( "%d %d %d\n", d, e, f);
ps( "%d %d\n", g, h);
}
used[i] = NO;
}
used[h] = NO;
}
used[g] = NO;
}
used[f] = NO;
}
used[e] = NO;
}
used[d] = NO;
}
used[c] = NO;
}
used[b] = NO;
}
used[a] = NO;
}
return 0;
}