算法训练 输出米字形
时间限制: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 |