PAT B1027 打印沙漏 (20 分)

在这里插入图片描述
参考代码:

#include <iostream>
#include<stdio.h>
#include<algorithm>
#include<math.h>
using namespace std;

int main()
{
    int N;
    char C;
    int halrow;
    scanf("%d %c",&N,&C);
    halrow=sqrt((N+1)/2.0);
    //第一行
    int first=2*halrow-1;
    for(int i=0;i<halrow;i++)
    {
        for(int j1=0;j1<i;j1++)
        {
            printf(" ");
        }
        for(int j2=0;j2<first;j2++)
        {
            printf("%c",C);
        }
        /* for(int j1=0;j1<i;j1++)//注意:每一行的末尾没有空格
        {
            printf(" ");
        }*/
        printf("\n");
        first-=2;
    }
    first+=4;
     for(int i=halrow-2;i>=0;i--)
    {
        for(int j1=0;j1<i;j1++)
        {
            printf(" ");
        }
        for(int j2=0;j2<first;j2++)
        {
            printf("%c",C);
        }
        /*for(int j1=0;j1<i;j1++)
        {
            printf(" ");
        }*/
        printf("\n");
        first+=2;
    }
    printf("%d",(N-(2*halrow*halrow-1)));

    return 0;
}

解题思路:
1.我是根据等差公式求出总和,小于N值,从而算出行数
2.此题需要注意:每一行的末尾没有多余的空格,最开始我一直以为是我等差数列算错了,一直没发现原来关键原因是每一行末尾是没有空格的

发布了11 篇原创文章 · 获赞 0 · 访问量 253

猜你喜欢

转载自blog.csdn.net/weixin_40852277/article/details/101470942