打印回形字
题目:
打印一个回形字
输入格式
多组输入输出,如果遇到.字符,则表示所做出来的图形已经够了。
每个测试样例为一行包含一个字符和一个整数n(6<=n<=50),字符代表用这个字符来打印图形,n代表这个图形高度
输出格式
每个回字形中间应空一行,行末没有多余的空格,最后一个图形后面没有多余空行。
样例输入
a 7
a 6
.
样例输出
aaaaaaaaaaaaaa
a a
a aaaaaa a
a aaaaaa a
a aaaaaa a
a a
aaaaaaaaaaaaaa
aaaaaaaaaaaa
a a
a aaaa a
a aaaa a
a a
aaaaaaaaaaaa
说明/提示
为保证图形对称,中间矩形的长一定是偶数。
中间矩形的长为k,k=(n*2-2)/2,k如果不是偶数就-1。
中间矩形和外框的左右的距离为(n*2-中间矩形的长-2)/2,
上下和外框的距离都是一行。
#include <stdio.h>
#include <string.h>
#include <iostream>
using namespace std;
int main()
{
int n;
char m;
while (cin>>m) {
if (m=='.') { //第一个字符若为.则结束
break;
}
cin>>n;
int k=(n*2-2)/2;
if (k%2!=0) {
k=k-1;
}
int juli=(n*2-k-2)/2;
for (int i=0;i<n;i++) {
if (i==0||i==n-1) { //首行和末行 只输出字符
for (int j=0;j<2*n;j++) {
cout<<m;
}
cout<<endl;
}
if (i==1||i==n-2) { //第二行和倒数第二行
cout<<m;
for (int j=0;j<2*n-2;j++) {
cout<<" ";
}
cout<<m;
cout<<endl;
}
if (i>=2&&i<n-2) { //中间需输出矩形的部分
cout<<m;
for (int j=0;j<juli;j++) {
cout<<" ";
}
for (int j=0;j<k;j++) {
cout<<m;
}
for (int j=0;j<juli;j++) {
cout<<" ";
}
cout<<m;
cout<<endl;
}
}
cout<<endl;
}
return 0;
}