标题:【求助】用“*”打印出一个风车图案
只看楼主
Sky_
Rank: 2
等 级:论坛游民
帖 子:38
专家分:10
注 册:2019-12-17
结帖率:100%
已结贴  问题点数:20 回复次数:6 
【求助】用“*”打印出一个风车图案

怎么打印出这样的图案
我的思路是先打印出上半部分,下半部分就好整了
但上半部分我没整出来,我可以分别打出左边和右边但没合在一起

长成这样了
搜索更多相关主题的帖子: 图案 思路 打印 
2019-12-21 18:34
Sky_
Rank: 2
等 级:论坛游民
帖 子:38
专家分:10
注 册:2019-12-17
得分:0 
#include<stdio.h>
int main ()
{
    int i,j,n,t;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d",&n);
        int k;
        k=2*n+1;
        for(i=0; i<=k; i++)
        {
            if(i>=n+1)
            {
                for(int q=1; q<=(n-(i-n))*2+1; q++)
                {
                    printf(" ");
                }
                for(int m=1; m<=2*(i-n)-1; m++)
                {
                    printf("* ");
                }
                for(int q=1; q<(n-(i-n))*2+1; q++)
                {
                    printf(" ");
                }
            }
            for(j=0; j<=2*(2*n+1)+1; j++)
            {
                if(i<=(-j+13)&&i>=(j-7)&&j>=7)
                {
                    printf("* ");
                }
                else printf(" ");
            }
            printf("\n");
        }
    }
    return 0;
}
这是我的代码 嗯。。。。是错的
2019-12-21 18:34
纯蓝之刃
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:76
帖 子:554
专家分:3690
注 册:2019-7-29
得分:13 
加一句就好了,别忘了结贴
程序代码:
#include <stdio.h>
#include <stdlib.h>

int main ()
{
    int i,j,k,n;
    char **a;

    while(1)
    {
        scanf("%d",&n);
        n=n*2+1;            //加一句就好了

        a=(char**)calloc(n*2+1,sizeof(char*));
        for(i=0;i<n*2+1;i++)a[i]=(char*)calloc(n*2+1,sizeof(char));

        for(i=0;i<n;i++)
        {
            if(i<=n/2)
                k=i;
            else
                k=n-i-1;
            for(j=0;j<=k;j++)
                a[i][n+j]=a[i+n+1][n-j]=a[n-j][i]=a[n+j][i+n+1]='*';
        }

        for(i=0;i<n*2+1;i++)
        {
            for(j=0;j<n*2+1;j++)
                printf("%c ",a[i][j]);
            printf("\n");
        }

        free(a);                    //释放动态内存
        for(i=0;i<n*2+1;i++)
            free(a[i]);
    }

    system("pause");
    return 0;
}


[此贴子已经被作者于2019-12-21 21:37编辑过]


一沙一世界,一花一天堂。无限掌中置,刹那成永恒。
2019-12-21 20:21
Sky_
Rank: 2
等 级:论坛游民
帖 子:38
专家分:10
注 册:2019-12-17
得分:0 
回复 3楼 纯蓝之刃
谢谢大佬解答
不过运行出来和案例有些不太一样
而且 在不考虑边长的情况下(样例边长为2n-1) 只有n为奇数的时候风车样子才比较正常 偶数时有一点点畸形,特别是n=1,n=2的时候

2019-12-21 21:18
forever74
Rank: 12Rank: 12Rank: 12
来 自:CC
等 级:贵宾
威 望:49
帖 子:1636
专家分:3940
注 册:2007-12-27
得分:7 
试试这个,不太严谨。
#include <stdio.h>
#include <math.h>
int main()
{
    int n, x, y;
    scanf("%d", &n);
    while (n)
    {
        for (y = 2 * n + 1; y >= -2 * n - 1; y--)
        {
            for (x = -2 * n - 1; x <= 2 * n + 1; x++)
            {
                if (x == 0 && y == 0)putchar(' ');
                else if (abs(x) + abs(y) <= 2 * n + 1 && (x==0||y==0||(double)y/x>fabs((double)y/x)/((double)y/x)))putchar('*');
                else putchar(' ');
            }
            putchar('\n');
        }
        scanf("%d", &n);
    }
}


[此贴子已经被作者于2019-12-21 22:03编辑过]

收到的鲜花
  • 叶纤2020-02-09 12:15 送鲜花  5朵   附言:太厉害了,我看了一个月未明白赞

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2019-12-21 21:58
Sky_
Rank: 2
等 级:论坛游民
帖 子:38
专家分:10
注 册:2019-12-17
得分:0 
回复 5楼 forever74
谢谢大佬解答
不过*之间是要有空格的
所以还是不太对
收到的鲜花
  • 叶纤2020-02-09 12:13 送鲜花  1朵   附言:5楼代码正解,把if去掉是答案
2019-12-23 13:08
Sky_
Rank: 2
等 级:论坛游民
帖 子:38
专家分:10
注 册:2019-12-17
得分:0 
回复 3楼 纯蓝之刃
谢谢谢谢
完全对了
不过我还没有完全看懂代码 我再学习学习
2019-12-23 18:12



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-498534-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026485 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved