Mogic(咳咳,懂得都懂)
Description
霍格兹茨膜法学校的学生蛤利·波特厌倦了平静的生活,在一次闲逛中,他发现了一本老旧的日记,日记中详细记载了伏地膜早年在校期间所研究的种种密术。其中,一种被称为「时间膜法」的密术吸引了蛤利的注意,这种密术需要使用者发动膜法阵来启用,以换取少得可怜的几乎只能以秒计算的时间转移效果。发动膜法阵时,施法者需要构建一个六芒星阵才能发动。
悲剧的是,蛤利并不会画六芒星,所以他只能求助于你,你能帮助他成功发动膜法吗?
Input
输入包含多组数据(数据组数不超过 10),到 EOF 结束。
每组输入包含一行,为一个整数 n (3 <= n <= 10),代表六芒星的 六个角上的正三角形 及 中心正六边形 的边长 (边上星号的个数)。
Output
对于每组输入,输出对应大小的膜法阵图案,每组输出后面跟一行空行,详细输出格式参见示例。
六芒星图案中,每行输出的末尾都是星号,后面没有多余的空格。
Sample Input
3
4
Sample Output
Hint
请细心观察示例,数清每一行星号和空格的数量关系即可。一行上连续的星号之间可能存在空格。
吼吼吼吼
这个题不难,推出来每一行的关系就可以了。
第一个先输出最上面的顶点,确定好顶点的位置。
然后循环输出第二行到第n-1行
然后输出第三行
然后再循环输出n+1行到n+n-1行
然后把上面的循环倒着来一遍就可以了
#include<iostream>
using namespace std;
int main(){
int n;
int a=0;
while(cin>>n){
//3*n-2+(n-1)*3
if(a){
cout<<endl;
}
a++;
for(int i=0;i<n*3-1-2;i++)
cout<<" ";
cout<<"*"<<endl;
for(int i=1;i<=n-2;i++){
for(int j=0;j<n*3-1-2-i;j++)
cout<<" ";
cout<<"*";
for(int j=0;j<i*2-1;j++)
cout<<" ";
cout<<"*"<<endl;
}
for(int i=0;i<n*3-3;i++){
cout<<"* ";
}
cout<<"*"<<endl;
for(int i=1;i<=n-2;i++){
for(int j=0;j<i;j++)
cout<<" ";
cout<<"*";
for(int j=0;j<(n-1-i)*2-1;j++){
cout<<" ";
}
cout<<"*";
for(int j=0;j<(n-1)*2+i*2-1;j++)
cout<<" ";
cout<<"*";
for(int j=0;j<(n-1-i)*2-1;j++){
cout<<" ";
}
cout<<"*"<<endl;
}
for(int i=0;i<n-1;i++)
cout<<" ";
cout<<"*";
for(int i=0;i<(n-1)*2+(n-1)*2-1;i++){
cout<<" ";
}
cout<<"*"<<endl;
for(int i=n-2;i>=1;i--){
for(int j=0;j<i;j++)
cout<<" ";
cout<<"*";
for(int j=0;j<(n-1-i)*2-1;j++){
cout<<" ";
}
cout<<"*";
for(int j=0;j<(n-1)*2+i*2-1;j++)
cout<<" ";
cout<<"*";
for(int j=0;j<(n-1-i)*2-1;j++){
cout<<" ";
}
cout<<"*"<<endl;
}
for(int i=0;i<n*3-3;i++){
cout<<"* ";
}
cout<<"*"<<endl;
for(int i=n-2;i>=1;i--){
for(int j=0;j<n*3-1-2-i;j++)
cout<<" ";
cout<<"*";
for(int j=0;j<i*2-1;j++)
cout<<" ";
cout<<"*"<<endl;
}
for(int i=0;i<n*3-1-2;i++)
cout<<" ";
cout<<"*"<<endl;
}
return 0;
}