件名の説明:
速報、掲示板!教師が必要とされなければならない、我々は最も基本的な能力のプログラマーである印刷タイトルのグラフィックを、しなければなりません。その騒ぎ、我々はAからZに、AAAAA ABBBA ABCBA ABBBA AAAAAが内外にあるグラフィックスのための要求しました 各層は、最も中心の文字の種類、最内層A、即ちAです。
入力フォーマット:
ライン、グラフィックスのレイヤ数の整数
出力フォーマット:
パターンとして、
サンプル入力:
3
出力例:
AAAAA
ABBBA
ABCBA
ABBBA
AAAAA
アイデアの分析:
- コンピューティング入力グラフィックスの行と列の数に基づいて、2次元配列を作成します。
- 外側から内側層、階層(AからZ >>)に加え文字に、タイトルから分かります。
- 要素が重複配列の最外層に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;
}