2356鳩の巣原理[アプリケーション] - 複数のPOJを探します

問題の説明は、
入力N天然(すなわち、正の整数)の数値が含まれている(N <= 10000)。その数字の各々は、この数字は必ずしも異ならない大きく15000以下である(それらの2つ以上が等しくなることが起こり得ます)。あなたの仕事は、選ばれた数の和がNのために複数の(すなわちN * K =いくつかの自然数kに対して選択された数の(合計))となるように、与えられた番号(1 <=数<= N)の数を選択することです。

入力 
入力の最初の行は、単一の番号Nを含む次のN行のそれぞれは所与のセットからの1つの数を含んでいます。

出力
の場合は、あなたのプログラムは、上の(数字のターゲットセットは、それはそれ以外の場合は、選択した番号自体が続く最初の行に選択した番号の数を印刷する必要があります出力に単一番号0を印刷する必要があります見つけることができないと判断します任意の順序で別々の行毎)。 

必要なプロパティを持つ数字の複数のセットがある場合は、それらの出力のみ1(好ましくは、お気に入り)に印刷する必要があります。

サンプル入力
5
1
2
3
4
1

サンプル出力
2
2
3

所定の配列およびnは、n個の数字を含む、彼らがでなければならないように、連続したシーケンスを探しているの倍数:質問の意味

アイデア:引き出しの原則の古典的なアプリケーション

 

 


ACコード:

1の#include <stdio.hの>
 2の#include <iostreamの>
 3の#include < 文字列・H>
 4の#include <アルゴリズム>
 5  
6  使用して 名前空間STD。
7  の#define N 100502
 8  int型ARR [N]。
9  INT VIS [N]。
10  INTの和[N]。
11  INT メイン(){
 12      INT N。
13      一方(〜のscanf(" %d個"、&N)){
 14          のintフラグ= 0 15         和[ 0 ] = 0 16          のためにint型 i = 1 ; iが<= N; iが++ ){
 17              のscanf(" %dの"、およびARR [I])。
18              和[I] =和[I- 1 ] + ARR [I]。
19              であれば(和[I]%のn個の== 0 ){
 20                  フラグ= I。
21              }
 22          } 
 23          であれば(フラグ){
 24              のprintf(" %d個の\ n " 、フラグ)。
25             以下のためにint型 i = 1 ; iは=フラグ<; iは++ ){
 26                  のprintf(" %Dを\ n " 、ARR [I])。
27              }
 図28は、             継続し29          }
 30          のためのint型 i = 1 ; iが<= N; iが++ ){
 31の             場合(VIS [和[I]%のNを]){
 32                  INT ANS = I-(VIS [和[I]%のN])。
33                  のprintf(" %d個の\ n " 、ANS)。
34                  のためにINT J = VIS [和[I]%のN] +1 ; J <= I; J ++ ){
 35                      のprintf(" %d個の\ n " 、ARR [J])。
36                  }    
 37                  ブレーク38              } 
 39              VIS [和[I]%のN] = I。
40          }    
 41      }
 42  
43      戻り 0 ;
44  }
 45  
46  / * 
47  5
 48  4 3 4 3
 49  4 7 11 14
 50  
51  / *

 

おすすめ

転載: www.cnblogs.com/pengge666/p/11567455.html
おすすめ