Mogic(咳咳,懂得都懂)

作者: zqqian 分类: ACM 发布时间: 2017-04-22 23:47

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;
}

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注