タイトルリンク:http : //lx.lanqiao.cn/problem.page?gpid=T66
ブルーブリッジカップの基本練習
リソース制限
時間制限:1.0秒メモリ制限:512.0 MB
問題の説明
ラウンドの数は、マトリックスの端に沿って取得されます。現在の方向で使用可能な、または既に取得されていない場合は、左に90度回転します。これは、最初はマトリックスの左上隅にあり、方向は下になっています。
入力形式入力の
最初の行は2つの正の整数m、nは200以下で、行列の行と列を表します。次のm行および行ごとのn整数は、この行列を表します。
出力形式
出力は1行のみで、合計数はmnで、入力行列の丸い形をとった結果です。番号はスペースで区切られ、行の終わりに余分なスペースがあってはなりません。
サンプル入力
3 3
1 2 3
4 5 6
7 8 9
サンプル出力
1 4 7 8 9 6 3 2 5
サンプル入力
3 2
1 2
3 4
5 6
サンプル出力
1 3 5 6 4 2
解決策:出力をトラバースするときは、常に特定の順序(下、右、上、左)があります。。。ループを形成し、出力形式の制御に注意を払い、90度回転する必要があるかどうかを判断します。すべてのデータ出力が停止するまで。ACコードを直接入力します。
#include <iostream>
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int s[10009];
int main(int argc, char** argv) {
int a[210][210];
int m,n;
cin>>m>>n;
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
scanf("%d",&a[i][j]);
}
}
int i=-1,j=0,k=0;
while(k<m*n)
{
while(a[++i][j]!=-1&&i<m) //向下
{
if(k==0)
{
cout<<a[i][j];
}
else cout<<' '<<a[i][j];
k++;
a[i][j]=-1;
}
i--;
while(a[i][++j]!=-1&&j<n) //向右
{
if(k==0) cout<<a[i][j];
else cout<<' '<<a[i][j];
k++;
a[i][j]=-1;
}
j--;
while(a[--i][j]!=-1&&i>=0) //向上
{
cout<<' '<<a[i][j];
k++;
a[i][j]=-1;
}
i++;
while(a[i][--j]!=-1&&j>=0) //向左
{
cout<<' '<<a[i][j];
k++;
a[i][j]=-1;
}
j++;
}
cout<<'\n';
return 0;
}