問題の説明(ブルーブリッジカップの練習システムが提出することができます)
69 258 + 3 = 714分の100:100は、混合画分の形で表すことができます。
82 + 100 = 197分の3546:それはまた、のように表すことができます。
注前記分数、番号1〜9に見える一度だけ、それぞれ(0を含みません)。
このような混合割合は、11 100の表記があります。
入力形式
標準入力からの正の整数N(N <×1000 1000)
出力フォーマット
デジタル番組を出力してデジタル1〜9種の数が示される全てからなる漏れ分数なし省略する。
注:各々の出力に数値表現でのみ統計を言っ必要ありません!
サンプル入力1
100
サンプル出力1
11
サンプル入力2
105
サンプル出力2
6
(とりわけ)I問題解決のアイデア:列挙方法
数値が異なるため、配列は[1,2,3,4,5,6,7,8,9]、その後、完全な配列が配置されて初期化することができます。前述の順列及び組合せのそれぞれについて、それは、三つに、B、Cカットした後の、B、Cの各組み合わせの数を取ります。
例えば、アレイは、完全配列[3,6,9,2,5,8,7,1,4]である場合、最初の値として、= 3の場合には(もちろん、36369さらにを取ることができます.. 。、前提は、以上のnはない)、次にB、この値のcが、それらのいずれかが前に「/」、「/」の間に挿入され、3後に開始、撮影することができ、B、Cは、戻って、(b)に、C値は、それが+1であることを、+ B / C == Nを確認するたびに得られます。
順列が取得されると(私も取得するにはnext_permutation()関数を使用)、利用可能
場合= 3、B、C、好ましくは6 / 9258714,69 / 258714,692 / 58714 ...
場合= 36、B、C、好ましくは9 / 258714,92 / 58714,925 / 8714 ...
場合場合= 369、B、C、好ましくは2 / 58714,25 / 8714,258 / 714 ...(N = 100であれば、時間は、誤差の値です)
......
詳細:cが0にはできません
書式#include <iostreamの> の#include <アルゴリズム> 使用して名前空間はstdを、// 拿数字INT toNum(INT *データ、INT S、int型E){ int型 RET = 0 。 用(INT I = S; I <= E; I ++ ){ RET = RET * 10個の + データ[I]; } 戻りRET。 } int型のmain(){ int型のデータ[ 10 ]。 整数nは、ANS、S、E、A、B、C、フラグ。 しばらく(〜のscanf( " %のD "、およびN-)){ ため(INT I = 0 ; I < 10 ; I ++)データ[I] = I; ANS = 0 ; 行い{ S = E = 1。; ながら(1 ){ A = toNum (データ、S、E); //は、得られた値を決定 場合(A> = N-)BREAKを ; // 取得した値は、断面nよりも大きい場合、エラーがあまりにも記載されているが、直接配置されている次 // からメークスコア右の1桁の数字だけずれているために、左 のために(int型= E + I 1、I < 10 - 1。 ; I ++){ // そうでない場合は、分母がゼロである、番号Cが存在することを保証しなければならないので、I <10-1 B = toNum(データ、+ E 1 、I); C = toNum(データ、I + 1、9 ); IF!(Bの%Cは、= 0)続行; IF(A + B / C == N-)ANS ++ ; } E ++; // 移動 } } ながら(next_permutation(データ+ 1、データ+ 10)); // 完全な配列 COUT ANS << << ENDL; } 戻り 0 ; }
ここでは沈黙の音があります。