フォーチュンは5ベーシスclass3-周回印刷マトリックスフランスのタイトルを残しました

フォーチュンは5ベーシスclass3-周回印刷マトリックスフランスのタイトルを残しました

1.トピック

整数行列の行列を考えると、道の円形の動きに合わせてそれを印刷してください。
例えば:1,234,567,891,011,121,314 15 16の印刷結果:1,2,3,4,8,12,16,15,14,13,9,5,6,7、図11は、10
[]に必要な余分なスペースの複雑さはO(1)です。

ここに画像を挿入説明

2.分析

(1)以下に示すようにタイトルは、B、C、Dの境界線を制御するための4つの変数を考慮し、Cが行を示し、B、Dは列を表し(b)の左上隅で、(C、D)であります右下隅。主題に従って逆ウェールB、横行逆cは横方向、Dウェールズ、印刷を必要とします。後++、B ++、C、D、すなわち、右下隅点移動する左上隅の右下隅点が移動する左上隅。四角枠の内側に印刷を続行し、その値(a、b)は、間違ったまたは端部と、(C、D)が一致するまで、B、C、Dを変更します。

ここに画像を挿入説明
対価図印刷モードで印刷を容易にするために(2)は、変曲点は、次の印刷、残り印刷枚数の開始に設定されていません。

ここに画像を挿入説明

3.コアコード

(2)図のタイトルのように、個々の行と列を形成するために、最終的なプリントのグループ、および印刷のための正方形のフレームを構成しない、それが、但し、そのAと、決定する必要がありますCとBD。

void print_num(int arr[][height],int a,int b,int c,int d)
{
	if(a==c)
	{
		for(int i = b;i <= d;i++)
		{
			cout<<arr[a][i]<<" ";
		}
	}
	else if(b==d)
	{
		for(int i = a;i <= c;i++)
		{
			cout<<arr[i][b]<<" ";
		}
	}
	else
	{
		int cur_i = a;
		int cur_j = b;
		while(cur_j != d)
		{
			cout<<arr[a][cur_j]<<" ";
			cur_j++;
		}
		while(cur_i != c)
		{
			cout<<arr[cur_i][d]<<" ";
			cur_i++;
		}
		while(cur_j != b)
		{
			cout<<arr[c][cur_j]<<" ";
			cur_j--;
		}
		while(cur_i != a)
		{
			cout<<arr[cur_i][b]<<" ";
			cur_i--;
		}
	}
}

(2)は、彼らが最後に残った数を印刷しなければならない場合が一致したときに同じ番号が参照して印刷条件は、左上隅の点が間違った点右下隅とすることができないで呼び出し

while(a <= c && b <= d)
	{
		print_num(arr,a,b,c,d);
		a++,b++,c--,d--;
	}

4.完全なコード

#include<iostream>
#define height 3
#define width 3
using namespace std;

void print_num(int arr[][height],int a,int b,int c,int d)
{
	if(a==c)
	{
		for(int i = b;i <= d;i++)
		{
			cout<<arr[a][i]<<" ";
		}
	}
	else if(b==d)
	{
		for(int i = a;i <= c;i++)
		{
			cout<<arr[i][b]<<" ";
		}
	}
	else
	{
		int cur_i = a;
		int cur_j = b;
		while(cur_j != d)
		{
			cout<<arr[a][cur_j]<<" ";
			cur_j++;
		}
		while(cur_i != c)
		{
			cout<<arr[cur_i][d]<<" ";
			cur_i++;
		}
		while(cur_j != b)
		{
			cout<<arr[c][cur_j]<<" ";
			cur_j--;
		}
		while(cur_i != a)
		{
			cout<<arr[cur_i][b]<<" ";
			cur_i--;
		}
	}
}
int main()
{
	int arr[height][width] = {1,2,3,4,5,6,7,8,9};
	//int arr[height][width] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
	int a = 0,b = 0,c = height - 1,d = width - 1;
	while(a <= c && b <= d)
	{
		print_num(arr,a,b,c,d);
		a++,b++,c--,d--;
	}
	system("pause");
	return 0;
}

5.出力

ここに画像を挿入説明

公開された51元の記事 ウォンの賞賛1 ビュー1388

おすすめ

転載: blog.csdn.net/shi_xiao_xuan/article/details/103656273