PTAのタマネギ(超簡単に理解するために)

件名の説明:

速報、掲示板!教師が必要とされなければならない、我々は最も基本的な能力のプログラマーである印刷タイトルのグラフィックを、しなければなりません。その騒ぎ、我々はAからZに、AAAAA ABBBA ABCBA ABBBA AAAAAが内外にあるグラフィックスのための要求しました 各層は、最も中心の文字の種類、最内層A、即ちAです。

入力フォーマット:

ライン、グラフィックスのレイヤ数の整数

出力フォーマット:

パターンとして、

サンプル入力:

3

出力例:

AAAAA
ABBBA
ABCBA
ABBBA
AAAAA

アイデアの分析:

  1. コンピューティング入力グラフィックスの行と列の数に基づいて、2次元配列を作成します。
  2. 外側から内側層、階層(AからZ >>)に加え文字に、タイトルから分かります。
  3. 要素が重複配列の最外層に2サイクル(i、j)は、文字Aの配列の添字を通って移動することを望むかもしれません。I、Jの初期値は、それぞれ、1であり、最大値m(2 * N-1)、そうアレイにおいて、場合(I == 1 || J == 1 || I ==の条件M仮定| | J ==メートル)Aは、というように。

コード:

#include <stdio.h>
int main()
{
	int stat, i, j, n, m;
	scanf("%d", &n);
	m = 2 * n - 1;
	int k = 1, z = m;
	char ch = 'A';
	char a[m+1][m+1]; //为了过程方便,这里把数组下标为0的空间浪费掉,数组从1开始,空间大小为m+1。
	for(stat = 0; stat < 26; stat++) //这个循环是控制字母依次增大,stat值可以更大,只不过当stat大于字母数后,ch值会继续自加,不止为Z。
	{
		for(i = k; i <= z; i++) //i的初始值为k,最大值为z,对比图形可以看出,循环的范围在逐渐减小,即外层保留覆盖,内层字母增大继续往里覆盖。j同理。
			for(j = k; j <= z; j++)
				if(i == k || j == k || i == z || j == z)
					a[i][j] = ch;
		if(k == m) break; //这里break掉的是控制字母的循环,当k == m时,整个图形的数组已经被字母全部覆盖掉。
		k++; //k控制覆盖从左上角向中间进行,对应的是上行和左列。
		z--;  //z控制覆盖从右下角向中间进行,对应的是下行和右列。
		ch += 1;
	}
	for(i = 1; i <= m; i++) //将数列输出。
	{
		for(j = 1; j <= m; j++)
			printf("%c", a[i][j]);
		printf("\n");
	}
	return 0;	
}

例実際の操作:

入力出力26のスクリーンショット

リリース元の2件の記事 ウォンの賞賛2 ビュー59

おすすめ

転載: blog.csdn.net/jenny_jack/article/details/104414872