PAT基本1050コイルマトリックス(25分)

この問題は、所与の必要  記入に従って増加の非整数次のN個の「スパイラルマトリックス」を いわゆる「スパイラルマトリックス」は、時計回りの螺旋方向を充填、グリッドから始まる最初のものの左上隅を指します。必要な行列のサイズ  m行の  N個の列、条件を満たし:M × Nはに等しい  N、M Nであり;そして  M - N個のすべての可能な値の最小値をとります。

入力フォーマット:

入力ライン1は正の整数で与えられているに  N、第二列が与えられる  正の整数Nが充填されます。すべての数値を超えない  1は、隣人は、スペースで区切られます。

出力フォーマット:

ヘリカル出力行列。各行  n桁、合計  m個の行。隣人は、スペースで区切られ、行の最後には、余分なスペースを持っていないかもしれません。

サンプル入力:

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


私は個人的には、いくつかのトピック、明確な思考、書き込みが少ないよりも重要であるが、この質問は、モデルをテストするために設計されていることを感じ
、OBJを設計する方法をゲームの小さな主人公に似た動きを、制御された、あなたが上に移動することができますし、ダウン
#include <iostreamの> する#include <cmath> の#include <アルゴリズム> 使用して 名前空間STD; INTデータ[ 10000 ] [ 10000 ] = { 0 }; int型の幅、高さ、 ENUM {Lは、R、U、D} DIR DIRを、// 列挙設定方向 INT X = 0、Y = 0 ; ボイド changedir(){ // 再ルーティング スイッチ(DIR){ ケース L:Uは、DIRを=; BREAK ; ケースU:DIR = R。破ります; ケース R:DIR = D。破ります; ケース D:DIR = 1。破ります; } } 無効アヘッド(){ スイッチ(DIR){ ケースL: もし(X- 1 > = 0 &&データ[X- 1 ] [Y] == 0)x-- { changedir()。 先に(); } ブレーク; ケースR: もし(X + 1<幅&&データ[X + 1 ] [Y] == 0)X ++ { changedir()。 先に(); } ブレーク; ケースU: もし(Y- 1 > = 0 &&データ[X] [Y- 1 ] == 0)y-- { changedir()。 先に(); } ブレーク; ケースD: もし(Y + 1 <高&&データ[X] [Y + 1] == 0)Y ++ { changedir()。 先に(); } ブレーク; } } int型のmain() { int型M。 scanf関数(" %のD "、&M)。 int型NUM [M]; 以下のためにint型私= 0 ; iがMを<; I ++)はscanf関数(" %dの"、NUM + I)。 ソート(NUM、NUM + M、大きい< int型 > ()); 以下のためのint型私は=1 ;私は= SQRT(M)を<; I ++の)場合(M%のI == 0)幅= I。 高さ = M / 幅。 もし(幅< 高さ)スワップ(幅、高さ)。 データ[X] [Y] = NUM [ 0 ]; DIR = D。 以下のためにint型 i = 1 ; iがMを<; iは++ ){ 前方()。 データ[X] [Y] = NUM [I]。 } のためにint型 i = 0 ; iは幅<; I ++ のためのINT J = 0 ; J <高さ、jは++ もし(!J = height- 1)のprintf(" %d個" 、データ[i]は[J]); のprintf(" %dは\ nを" 、データ[i]は[J]); システム(一時停止)。 リターン 0 ; }

 




おすすめ

転載: www.cnblogs.com/littlepage/p/11707703.html