PAT_A1103#整数の因数分解

ソース:

PAT A1103整数因数分解(30分)

説明:

K - 正の整数のP因数  Nは、書き込みする  の和としてのN  のP番目のパワー  Kpositive整数。あなたが見つけて、プログラムを書くことになっている  K - のP分解  任意の正の整数のNを  N、  Kおよび  P.

入力仕様:

各入力ファイルが一列に与える一つのテストケースが含まれている3つの正の整数  N(≤)、  K(≤)と  P(1)。行中の数字は、スペースで区切られます。

出力仕様:

各場合について、溶液が存在する場合、形式に出力:

N = n[1]^P + ... n[K]^P

ここで、  n[i] (i = 1、...、 Kである  i番目の因子。すべての要因は非増加順に印刷されなければなりません。

注意:ソリューションは、一意ではないかもしれません。例えば、169の5-2分解は、次のような9つの溶液有する  1または  1以上。あなたは、出力要因の最大の和と一つにしなければなりません。タイがある場合、最大の因子配列が選択されなければならない-シーケンスは{  、}よりも大きいと言われている{  、}が存在する場合  1ように  、I = B I のために  、私は< Lと  L > bはL

何の解決策、シンプルな出力がない場合  Impossible

サンプル入力1:

169 5 2

サンプル出力1:

169 = 6^2 + 6^2 + 6^2 + 6^2 + 5^2

サンプル入力2:

169 167 3

サンプル出力2:

Impossible

キー:

注意:

  • 異なる精度異なるコンパイラ環境POW機能、データのPATランは右ですが、私は、コンピュータ上で走っ間違っている、あなた自身を書くことができます

コード:

1  / * 
2  時間:2019年7月2日午後06時55分08秒
 。3  問題:#整数因数分解PAT_A1103
 。4  AC:18時08分
 。5  
。6  タイトル効果:
 7が Pの整数Nは、Kの式により指数に分解されますそして
 8  入力:
 9  。起因式K、インデックスの数に正の整数N <= 400、1 <P <= 7
 10  出力:
 11  本当の順に、
 12  ない場合のみ、塩基価と最大値のセット印刷
 13を 一意でない場合印刷辞書配列のより大きいセットは、
 14の 
15の 基本的な考え方:
 16  深さ優先探索第二層K溶液に時間が存在する場合、次いで、最適解を選択する
 。17  * / 
18であるの#include <cstdioを>
 19の#include <ベクトル>
 20である# <cmath>などが
 21である 使用して 名前空間STD;
22  int型 K、N、P、optValue = 0 23ベクトル< int型 > FAC、一時、ANS;
24  
25  ボイド DFS(int型のインデックス、int型 numK、int型の和、INT sumFac)
 26  {
 27の     場合(numK == K &&和== N && sumFac> optValue)
 28      {
 29          optValue = sumFac。
30の          ANS = TEMP。
31      }
 32      であれば(numK> = K ||和> = N ||インデックス<= 0 33         返します34      temp.push_back(インデックス)
35      DFS(インデックス、numK + 1、和+ FAC [インデックス]、sumFac + 指数);
36      temp.pop_back()。
37      DFS(index- 1 、numK、和、sumFac)。
38  }
 39  
40  のint main()の
 41  {
 42  の#ifdef ONLINE_JUDGE
 43  の#else 
44      freopenは(" Test.txtを"" R " 、STDIN)。
45  #endifの // ONLINE_JUDGE 
46  
47      のscanf(" %D%D%D "、&​​N&K&P)。
48      のためには、int型 i = 0 ; POW(I、P)<= N; iは++ ){
 49          fac.push_back(POW(I、P))。
50      }
 51      DFS(fac.size() - 1000 );
52      であれば(ans.size()== 0 53          のprintf(" 不可" )。
54      他の
55      {
 56          のprintf(" %D =%のD ^%のD "、nは、ANS [ 0 ]、P)。
57          のためには、int型 iは= 1 ; iはans.size()<; iは++ 58              のprintf(" +%のD ^%Dを" 、ANS [i]は、P)。
59      }
 60  
61      戻り 0 ;
62 }

 

おすすめ

転載: www.cnblogs.com/blue-lin/p/11122495.html