プログラムの実行結果は以下の通り。
Find 192 x 576 = 48 ^ 3
図にすると以下のようになる。

EXCELでの結果は以下の通り。

プログラムのソースは以下の通り。
#include "puzutl.h"
int pow3( int x, int y)
{
int z = x;
while( --y> 0) {
z *= x;
if( z > 999*999) return 0; // 解は3桁x3桁に等しくなるのでこれより大きな数は無視
}
return z;
}
void check( int num[]) // num[]は1〜9までの数字が入っている
{
for( int m=0; m< 9; m++) { // 9回ローテートしてnum[0]に1〜9の数字全てを割り当てて調べる
int a = num[0]; // 判りやすく文字に割り当てる
int b = num[1];
int c = num[2];
int d = num[3];
int e = num[4];
int f = num[5];
int g = num[6];
int h = num[7];
int i = num[8];
int x = a*100 + b*10 + i;
int y = f*100 + d*10 + e;
int z = pow3( g*10 + c, h); // (g*10+c)**h
if( x * y == z) { // 計算式が等しいか?
ps( "Find\n");
ps( "%d%d%d x %d%d%d = %d%d ^ %d\n", a, b, i, f, d, e, g, c, h);
}
// num[]に入った数字をローテートする
int tmp = num[0];
for( int n=0; n< 8; n++) {
num[n] = num[n+1];
}
num[8] = tmp;
}
}
int main( int argc, cstring argv[])
{
int num[9] = { 1,2,3,4,5,6,7,8,9}; // 数字は順に並んでいる
check(num);
int revnum[9] = { 9,8,7,6,5,4,3,2,1}; // 数字は逆順に並んでいる
check(revnum);
return 0;
}