Mogic 题解源代码

来源:互联网 发布:淘宝经营人贷款条件 编辑:程序博客网 时间:2024/06/17 19:22

Description

霍格兹茨膜法学校的学生蛤利·波特厌倦了平静的生活,在一次闲逛中,他发现了一本老旧的日记,日记中详细记载了伏地膜早年在校期间所研究的种种密术。其中,一种被称为「时间膜法」的密术吸引了蛤利的注意,这种密术需要使用者发动膜法阵来启用,以换取少得可怜的几乎只能以秒计算的时间转移效果。发动膜法阵时,施法者需要构建一个六芒星阵才能发动。

悲剧的是,蛤利并不会画六芒星,所以他只能求助于你,你能帮助他成功发动膜法吗?

Input

输入包含多组数据(数据组数不超过 10),到 EOF 结束。

每组输入包含一行,为一个整数 n (3 <= n <= 10),代表六芒星的 六个角上的正三角形 及 中心正六边形 的边长 (边上星号的个数)。

Output

对于每组输入,输出对应大小的膜法阵图案,每组输出后面跟一行空行,详细输出格式参见示例。

六芒星图案中,每行输出的末尾都是星号,后面没有多余的空格。

Sample Input

34

Sample Output

      *     * ** * * * * * * * *     * *  *       * * *     * ** * * * * * *     * *      *         *        * *       *   ** * * * * * * * * * *   *       *   *  * *         * *   *           *  * *         * * *   *       *   ** * * * * * * * * *       *   *        * *         *

Hint

请细心观察示例,数清每一行星号和空格的数量关系即可。一行上连续的星号之间可能存在空格。


这个题目不知道难度如何,但是还是比较费时间的,当初我想到上下对称,却没有利用左右对称,如果再利用左右对称的话,那么会更加方便一些,话不多说了,直接上代码。

#include<iostream>using namespace std;#include<stdio.h>int main(){    int n;    while(scanf("%d",&n)==1)    {        int dai=6*n-5;        for(int i=1;i<=2*n-1;i++)//行数            {                    for(int j=1;j<=dai;j++)//这个就是每一列                    {                        if(i<n)                        {                            if(j==(dai)/2+1-i+1||j==(dai)/2+1+i-1)                            {                                printf("*");                            }                            else printf(" ");                            if(j==(dai)/2+1+i-1)                            {                                printf("\n");                                break;                            }                        }                        else if(i==n)                        {                            if(j==(dai)/2+1-i+1||j==(dai)/2+1+i-1)//代表是中间的哪一些                            {                                printf("*");                            }                            else if(j>=1+(i-n)&&(j+i-n)%2!=0)//全部都输出                                    printf("*");                            else printf(" ");                            if(j==dai-(i-n))                            {                                printf("\n");                                break;                            }                        }                        else if(i>n)                        {                            if(j==(dai)/2+1-i+1||j==(dai)/2+1+i-1)//代表是中间的哪一些                            {                                printf("*");                            }                            else if(j==1+(i-n)||j==(2*n-1-(i-n))||j==(6*n-5-(2*n-2)+(i-n))||j==(dai-(i-n)))                                    {                                        printf("*");                                    }                            else printf(" ");                                if(j==dai-(i-n))                            {                                printf("\n");                                break;                            }                        }                    }            }            for(int i=2*n-2;i>=1;i--)//行数            {                   for(int j=1;j<=dai;j++)//这个就是每一列                    {                        if(i<n)                        {                            if(j==(dai)/2+1-i+1||j==(dai)/2+1+i-1)                            {                                printf("*");                            }                            else printf(" ");                            if(j==(dai)/2+1+i-1)                            {                                printf("\n");                                break;                            }                        }                        else if(i==n)                        {                            if(j==(dai)/2+1-i+1||j==(dai)/2+1+i-1)//代表是中间的哪一些                            {                                printf("*");                            }                            else if(j>=1+(i-n)&&(j+i-n)%2!=0)//全部都输出                                    printf("*");                            else printf(" ");                            if(j==dai-(i-n))                            {                                printf("\n");                                break;                            }                        }                        else if(i>n)                        {                            if(j==(dai)/2+1-i+1||j==(dai)/2+1+i-1)//代表是中间的哪一些                            {                                printf("*");                            }                            else if((j+i-n)%2!=0&&(j==1+(i-n)||j==(2*n-1-(i-n))||j==(6*n-5-(2*n-2)+(i-n))||j==(dai-(i-n))))                                    {                                        printf("*");                                    }                            else printf(" ");                                if(j==dai-(i-n))                            {                                printf("\n");                                break;                            }                        }                    }            }        printf("\n");    }}

1 0
原创粉丝点击