プログラムの実行結果は以下の通り。今回は2つの方法の両方をプログラムしてみた。
方法1 76 × 76 ---------- 5776 方法2 76 × 76 ---------- 5776
プログラムのソースは以下の通り。
#include "puzutl.h"
YesNo used[10];
cstring ns = "0123456789";
void test1() {
ps( "方法1\n");
for( int a=0; a< 10; a++) {
used[a] = YES;
for( int b=0; b< 10; b++) {
if( used[b]) continue;
used[b] = YES;
int x = (a*10 + b) * (a*10+b);
int x1 = x % 10; x /= 10;
int x2 = x % 10; x /= 10;
int x3 = x % 10; x /= 10;
int x4 = x % 10; x /= 10;
if( x1 == b && x2 == a && x3 == a && (x4 != a && x4 != b)) {
ps( " %-.2s%-.2s\n", ns+a*2, ns+b*2);
ps( "× %-.2s%-.2s\n", ns+a*2, ns+b*2);
ps( "----------\n");
ps( "%-.2s%-.2s%-.2s%-.2s\n", ns+x4*2, ns+x3*2, ns+x2*2, ns+x1*2);
}
used[b] = NO;
}
used[a] = NO;
}
}
void test2()
{
ps( "\n方法2\n");
for( int i=0; i< 100; i++) {
int j = i;
int x = i*i;
int x1 = x % 10; x /= 10;
int x2 = x % 10; x /= 10;
int x3 = x % 10; x /= 10;
int x4 = x % 10; x /= 10;
int i1 = j % 10; j /= 10;
int i2 = j % 10; j /= 10;
if( x2 == i2 && x1 == i1 && x3 == i2 && i1 != i2 && x4 != i1 && x4 != i2) {
ps( " %-.2s%-.2s\n", ns+i2*2, ns+i1*2);
ps( "× %-.2s%-.2s\n", ns+i2*2, ns+i1*2);
ps( "----------\n");
ps( "%-.2s%-.2s%-.2s%-.2s\n", ns+x4*2, ns+x3*2, ns+x2*2, ns+x1*2);
}
}
}
int main( int argc, cstring argv[])
{
test1();
test2();
return 0;
}