题目描述
输出一个"X"型字符图形,给定字符为c
,格式要求
- 图形的中心是字符
'X'
- 四个斜轴上依次是字符
'A'
到给定c
- 行尾无空格。
具体见样例。
输入
每行一个字符c,字符只含大写字母。
输出
按顺序输出每个样例的对应结果。
样例输入
A C
样例输出
A A X A A C C B B A A X A A B B C C
提示
注意输入中回车也是字符!
#include<stdio.h>
int main()
{
char c;
while(scanf("%c",&c)!=EOF)
{
int n=c-'A'+1;//字母数
int num=n*2+1;//行列数
char pic[55][55];
for(int i=0;i<num;i++)//行
{
for(int j=0;j<num;j++)//列
{
pic[i][j]=' ';
}
}
for(int t=0;t<n;t++)//行
{
pic[t][t]=c-t;
pic[t][num-t-1]=c-t;
pic[num-t-1][t]=c-t;
pic[num-t-1][num-t-1]=c-t;
}
pic[n][n]='X';
for(int i=0;i<num;i++)//行
{
for(int j=0;j<num;j++)//列
{
printf("%c",pic[i][j]);
}
printf("\n");
}
}
return 0;
}
这是自己写的,图形可以打印正确,但因为题目要求行尾无空格,不太会解决,所以提交还是PE。
我是将一个正方形的二维数组全部赋值为空格,再将对应位置的空格改为字母,最后整体输出二维数组,最后的空格就无法删去,看别人的做法应该都是直接输出,不用储存,这样时间复杂度也会低很多。
试着敲了一下又可以了 😅😅😅 将最后输出的代码加一个限制条件即可
for(int i=0;i<num;i++)//行
{
for(int j=0;j<num;j++)//列
{
printf("%c",pic[i][j]);
if(i<=n&&j==num-i-1)//包括X上半部分的限制
break;
if(i>n&&j==i)//下半部分的限制
break;
}
printf("\n");
}