PAT_A1105#スパイラルマトリックス

ソース:

PAT A1105スパイラルマトリックス(25分)

説明:

この時間は、あなたの仕事は、一連の埋めるためにある  非増加順にらせん状のマトリックスにNは正の整数を。スパイラル行列は時計回りの螺旋状に移動し、その後、左上隅における最初の要素からで充填されています。マトリックスは、有している  m行  ここで、n列の  mおよび  nは以下満たす  M × nmustに等しいこと  N。 M N。そして  M - N個のすべての可能な値の最小値です。

入力仕様:

各入力ファイルには、1つのテストケースが含まれています。各場合について、最初の行は、正の整数与える  そしてNを次の行が含まれている  Nの正の整数で螺旋状マトリックスに充填します。すべての数字は超えないされている  行の1の数字はスペースで区切られます。

出力仕様:

各テストケースのために、出力結果の行列  のm行は、それぞれの内容は  、N個の番号。丁度1つの隣接する二つの数字の間のスペース、および各行の末尾に余分なスペースがなければなりません。

サンプル入力:

12
37 76 20 98 76 42 53 95 60 81 58 93

サンプル出力:

98 95 93
42 37 81
53 20 76
58 60 76

キー:

  • シンプルなシミュレーション

注意:

  • 基本的な考え方は、降順に順次充填されたマトリックスを配列決定することです。
  • ダイレクトオープンは1E4行列メモリを超え、より大きなM、Nサンプルの存在小さいので、代わりに一次元アレイの二次元アレイを使用します
  • 決意PT <Nのために必要な循環ループ内の4つの

コード:

1  / * 
2  のデータ:2019年6月8日午後4時12分47秒
 3。 問題:スパイラル#PAT_A1105マトリックス
 。4  AC:1時05分29秒
 。5  
6。 影響を受ける:
 7  配列降順時計回り行列に
 8  * / 
9の#include <機能>
 10の#include <cstdioを>
 11の#include <cmath>
 12であるの#include <アルゴリズム>
 13で 使用し た名前空間STD;
 14  のconst  int型 M + 1E4 = 10 ;
 15  INT 行列[M]、A [M] ;
 16  
。17  INT メイン()
 18である {
 19。 #ifdefのONLINE_JUDGE
 20  の#else 
21      freopenは(" Test.txtを"" R " 、STDIN)。
22  #endifの
23  
24      INT N、N、M。
25      のscanf(" %dの"、&N)。
26      のためには、int型 i = 0 ; iがNを<; iは++ 27          のscanf(" %dの"、および[I])。
28      のためにint型 iは=(INT)SQRT((二重)N)、I> =1 ; i-- 29      {
 30          であれば(N%I == 0 31          {
 32              N = I。
33              、M = N / I。
34              ブレーク;
35          }
 36      }
 37      ソート(+ N、大きな< INT > ());
38      充填(マトリックス、マトリックス+ M、0 );
39      INT PT = 0、C = 1、R = 1、R = M、C = N。
40      一方(PT < N)
41      {
 42          のためのint型私は、C =、私は、Pt <N <= N &&; iが++ 43              行列[C * R- 2 + I- 1 ] [++ PT = ]。
44          R ++ 45          のためには、int型 = rはIを、I <= M && PT <N; I ++ 46              行列[C * I- 2 + N- 1 ] = [++ PT ]。
47          N - ;
48          のためにint型 ; I> = C && PT <N i-- I = N 49              行列[C * M- 2 + I- 1] = [PT ++ ]。
50          M-- ;
51          のためには、int型 I = mを、I> = R && PT <N; i-- 52              マトリックスは[CのI- * 2 + C- 1 ] = [++ PT ]。
53個の          C ++ ;
54      }
 55      のためのint型 I = 1 ; I <= R; I ++ 56          のためのINT J = 1 ; J <= C; J ++ 57              のprintf(" %d個の%のC "、行列[C * I- 2 + J- 1]、J == C?' \ nを''  ' );
58  
59  
60      リターン 0 ;
61 }

 

おすすめ

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