タイトル説明
あなたが式を綴ることができ、N形「A + B = C」の数をマッチ棒?(非ゼロの数は、次に最上位ビットが0でない場合)、式Aは、B、Cは、マッチ棒スペル有する整数です。図マッチ棒に示す0-9と綴りの戦い:
注意:
-
彼らのニーズと等号2本のマッチ棒プラス
-
A≠B、その後、A + B = CとB + A = Cいるかのように異なる式(A、B、C> = 0)
- nはマッチ棒はすべて費やさなければなりません
入出力フォーマット
入力フォーマット:
Matches.in共通ライン入力ファイル、及び整数N(N <= 24)。
出力フォーマット:
総出力ファイルmatches.outライン、異なる方程式の数が綴ることができ表します。
サンプル入力と出力
入力サンプル#1:
サンプル入力1:
14
サンプル入力2:
18
出力サンプル#1:
出力例1:
2
出力例2:
9
説明
試料1 O [説明]
式2 1 = 0 + 1 + 0 = 1,1。
サンプル2 O [説明]
9式は次のとおりです。
0+4=4
0+11=11
1+10=11
2+2=4
2+7=9
4+0=4
7+2=9
10+1=11
11+0=11
バックトラックは、思い出すことができない高速な予備知識をバックトラック、この質問は、これを統合することができます:
#include <アルゴリズム> の#include <iostreamの> する#include <cstdioを> の#define N 1100 使用して 名前空間STDを、 int型 [N] = { 6、2、5、5、4、5、6、3、7、6 }。 int型 B [ 4 ]。 int型のn; int型でも= 0 ; ボイド dfind(INT POS){ ため(intは iは= 0 ; I <= N- 1、I ++ ){ 場合(N - [I]> = 0 ){ N = N - 〔I〕。 B [POS] = iは、 もし(POS == 3 ){ 場合(B [ 1 ] + B [ 2 ] == B [ 3 ] && N == 0 ){++ ; } } 他{ dfind(POS + 1 )。 } N + = [I]。 } } } int型(主ボイド){ cinを >> N; N = N - 4 。 以下のために(INT iは= 10、I <= N- 1、I ++ ){ [I] = [I / 10 ] + [I%10 ]。 } Dfind(1 )。 coutの << TOT << てendl; }