题目描述
安杰在你们的帮助下成功通过了前两轮的测试,现在彩虹小队没人再叫他猴子了。鉴于他的优良表现(其实是你们的),彩虹小队决定给安杰颁发新兵勋章。新兵勋章是一个V字形,每个人都有特定的尺寸和样式,现在给你安杰的尺寸大小和他想要的样式,你能画出安杰的新兵勋章吗?(当尺寸为偶数时,安杰想要将它反过来)
输入
输入数据由多组测试样例组成,每组占一行。包含一个整数n(1<=n<=50)和一个字符c,分别表示尺寸和样式。
输出
对于每组测试样例,输出新兵勋章的样式,且输出一个额外的空行。
样例输入
1 a
2 @
样例输出
思路
首先我们把它分成两个部分来写
一个是偶数一个是奇数
根据规律我们可以得到最长的那条边是3+4n
有2+n2层
勋章上层2n之前和n3+2之后都是勋章的符号
勋章最外面的边都也是符号
我们可以先吧最外面一圈先画上
最外面的边设置两个变量
1 和 3+4n-1
一个累加一个累减
就能把最外面一圈画好
这时候话内圈
根据找到的规律内圈也是两个变量
2n 和 n*3+2
一个累加一个累减
判断如果是到了这个位置就画符号
最后当两个值相等时候就连接上了
代码
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
char m;
while(cin>>n>>m){
int l=3+n*4;
int r=2+n*2;
int q=1;
int c=2+n,d=n*3+2;
int f=1;
if(n%2){
for(int i=1;i<=r;i++){
for(int j=1;j<=l;j++){
if(i==1){
if(j<=c||j>=d)cout<<m;
else cout<<" ";
}else if(i==r){
if(j==l)cout<<m;
else cout<<" ";
}else if(i>1&&i<r){
if(j==l||j==q)cout<<m;
else if(j==c||j==d){
if(f){
if(c==d){
cout<<m;
f=0;
}
else cout<<m;
}else cout<<" ";
}else cout<<" ";
}
}
l--;
q++;
c++;
d--;
cout<<endl;
}
}else{
l=l-r+1;
q=l;
c=2+2*n;
d=2+2*n;
f=0;
for(int i=1;i<=r;i++){
for(int j=1;j<=l;j++){
if(i==1){
if(j==l)cout<<m;
else cout<<" ";
}else if(i==r){
if(j<=2+n||j>=n*3+2)cout<<m;
else cout<<" ";
}else if(i>1&&i<r){
if(i>=(r/2)+1)f=1;
if(j==l||j==q)cout<<m;
else if(j==c||j==d){
if(f){
if(c==d){
cout<<m;
}
else cout<<m;
}else cout<<" ";
}else cout<<" ";
}
}
l++;
q--;
if(f){
c--;
d++;
}
cout<<endl;
}
}
cout<<endl;
}
return 0;
}