そのイタリア:入力N(2 <= N <= 79)
存在ABCDE / FGHIJ = nの表現かどうかを調べるには
直接の列挙は、各FGHIJ、ABCDE判定のために、すべての数字は(各数字が表示されます)を等しくないかもしれませんが、注意を払うが、範囲、などのフォーマットを列挙するために、フォーマットは本当に頭痛の種です。
コードは以下の通りです
#include <ビット/ STDC ++ H> に#define INF 0x3f3f3f3f の#define INF 0x7fffffffffffffff のtypedef 長い 長LL。 constの ダブル PI = 3.1415926535897931 。 CONST 長い 長い MOD = 1E9 + 7 。 const int型 MA = 1E7 + 10 。 const int型 MA = 2 * 1E5 + 10 。 const int型 = 1E3 +数10 。 const int型 MAXN = 1E8 + 10 。 使用して 名前空間はstdを、 ///////////////////////////////////////////// / INTチェック(int型、int型B) { int型 VIS [ 10 ]; のmemset(VIS、0、はsizeof(VIS)); // 各数字が表示された記録 のiF(> 98765 ) 戻り 0 ; // ABCDEは、この数よりも大きくはありません 文字列STR1、STR2、 STR1 = to_stringに(A); STR2 = to_stringに(B) のための(INT I = 0 ; I <str1.size(); I ++ ) { VIS [0009 [I] - 48 ] = 1 ; } のための(INT I = 0 ; I <str2.size(); I ++ ) { VIS [STR2 [I] - 48 ] = 1 ; } IF(B < 10000 ) VIS [ 0 ] = 1 ; // 4桁、手動プレ連結0 のint SUM = 0 ; のための(INT I = 0 ; I < 10 ; I ++ ) SUM + = VIS [I]。 リターン SUM == 10 ; // すべての数字が表示される場合は、チェックは、すなわち、すべてのFGHIJのABCDEと番号が同じではありません。 } のInt メイン() { int型 CNT = 0 、N-; 一方(CIN >> N - && N-) { IF(CNT ++ ) COUT << ENDL; INTフラグ=で0 ; のための(INT I = 1234 ; I < 99999 ; I ++ ) { IF(N-チェック(* I、I)) { のprintf("%05D /%05D =%D \ N- "私は* I)はN-、N-; のフラグ = 1 ; } } IF(!内のフラグ) { のprintf(" NOソリューション%D \ N-ために存在する。」、N-)は; // 出力形式を退屈、ああああああああああああああ } } 戻り 0 ; }