algo-82 輸出米字形
阿新 • • 發佈:2019-01-02
演算法訓練 輸出米字形
時間限制: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.翻轉
程式碼:
例如: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 |