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