プログラムの実行結果は以下の通り。
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; }