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

 

    原文作者:Z字形编排问题
    原文地址: https://blog.csdn.net/qq_34190271/article/details/61419568
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞