ブルーブリッジカップテストでは、基本的な演習のラウンドアクセスマトリックスのリターントラバーサル出力に質問します

タイトルリンク: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;
}
オリジナルの記事を6件公開 いいね1 訪問数141

おすすめ

転載: blog.csdn.net/qq_46015269/article/details/105491358