プログラムの実行結果は以下の通り。
Find 001 => 001 Find 002 => 002 Find 003 => 003 Find 035 => 053
プログラムのソースは以下の通り。
#include "puzutl.h"
int cmpc( const void* va, const void* vb) { // 文字列内の文字ソート用
char a = *(const char*)va, b = *(const char*)vb;
return a-b;
}
void threecmp( int ia, int ib)
{
char a[4], b[4];
sprintf( a, "%03d", ia);
sprintf( b, "%03d", ib);
qsort( a, 3, sizeof(char), cmpc); // 使っている数字を小さい順に並べ替える
qsort( b, 3, sizeof(char), cmpc);
if( !strcmp(a,b)) { // 同じ数字を使っているか?
ps( "Find %03d => %03d\n", ia, ib);
}
}
int main( int argc, cstring argv[])
{
int iok = 1;
for( int i=1; i< 1000; i++) {
int a[3] = { (i/100)%10, (i/10)%10, i%10};
if( a[0] == 4 || a[0] == 9 ||
a[1] == 4 || a[1] == 9 ||
a[2] == 4 || a[2] == 9) { // NG
}
else { // OK
threecmp( iok, i); // 3つの数字を比較する
iok++;
}
}
return 0;
}