1. 程式人生 > >algo-82 輸出米字形

algo-82 輸出米字形

演算法訓練 輸出米字形   時間限制:1.0s   記憶體限制:512.0MB        根據輸入的正整數n (1  米字形由一個(2n-1)*(2n-1)的矩陣組成,矩陣包含從大寫A開始的n個字母
  例如:n=3時,包含A,B,C;n=4時,包含A,B,C,D。
  矩陣的正中間為n個字母中字典序最大的那個,從這個字母開始,沿著西北、正北、東北、正西、正東、西南、正南、東南八個方向各有一條由大寫字母組成的直線。並且直線上的字母按字典序依次減小,直到大寫字母A。
  矩陣的其它位置用英文句號.填充。

  樣例輸入一
  3

  樣例輸出一
  A.A.A
  .BBB.
  ABCBA
  .BBB.
  A.A.A

  樣例輸入二
  4

  樣例輸出二
  A..A..A
  .B.B.B.
  ..CCC..
  ABCDCBA
  ..CCC..
  .B.B.B.
  A..A..A

思路:1.二位字元陣列  存位置a[i][j]=0;    2.先填字母位置,    3.再填.位置    4.翻轉
程式碼: 
#include<iostream>
using namespace std;
int main()
{
	int n,i,j,k,t;
	cin>>n;
	char a[2*n-1][2*n-1];
	for(i=0;i<2*n-1;i++)
	for(j=0;j<2*n-1;j++)
	a[i][j]=0;
	k=n;
	for(i=0;i<n-1;i++)//行數 
	{
		k--;//k為間隔距離,下一行比上一行小1; 
		t=i;
		for(j=1;j<=3;j++)//每行的字母數 ,除中間一行,其餘每行都有三個字母; 
		{
			a[i][t]='A'+i;//i為行數,t為字母位置 ;迴圈時 i不變,改變;第i行字母中間相距 
			t+=k;//第i行字母為'A'+i,字母相距(k=n-1-i); 
		}
	}
	for(i=0;i<n;i++)//中間一行 n-1 
	{
		a[n-1][i]='A'+i;//左邊 
		a[n-1][2*n-1-1-i]='A'+i;//右邊 
	}
	for(i=0;i<n-1;i++)//上半區,有.的行數0至n-2 
	for(j=0;j<2*n-1;j++)
	{
		if(a[i][j]==0)//沒被填上字母的位置,都用 .替換 
	        a[i][j]='.' ;
	} 
	for(i=0;i<n-1;i++)//翻轉,以n-1為對稱軸 
	for(j=0;j<2*n-1;j++)
	{
		a[2*n-2-i][j]=a[i][j];//關於n-1行對稱, 
	} 
	for(i=0;i<2*n-1;i++)
	{
		for(j=0;j<2*n-1;j++)
		    cout<<a[i][j];
		cout<<endl;
    }
} 

評測結果 正確
得分 100
CPU使用 15ms
記憶體使用 948.0KB