PTA-7-82 列印沙漏

Uoykik發表於2020-11-28

本題要求你寫個程式把給定的符號列印成沙漏的形狀。例如給定17個“*”,要求按下列格式列印

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

所謂“沙漏形狀”,是指每行輸出奇數個符號;各行符號中心對齊;相鄰兩行符號數差2;符號數先從大到小順序遞減到1,再從小到大順序遞增;首尾符號數相等。

給定任意N個符號,不一定能正好組成一個沙漏。要求列印出的沙漏能用掉儘可能多的符號。
輸入格式:

輸入在一行給出1個正整數N(≤1000)和一個符號,中間以空格分隔。
輸出格式:

首先列印出由給定符號組成的最大的沙漏形狀,最後在一行中輸出剩下沒用掉的符號數。
輸入樣例:

19 *

輸出樣例:

*****
 ***
  *
 ***
*****
2
#include <stdio.h>

int main(){
    int n;
    char x;
    scanf("%d %c",&n,&x);

    int i=1;
    int sum=1;
    if (n!=1)//n為1的情況不用進行sum和i的減
    {
        while(sum<n)
        {
            i+=2;
            sum+=2*i;
        }
        sum-=2*i;
        i-=2;//i為一行最大的符號數
    }
        int r=n-sum;

    for(int j=1;j<=i/2+1;j++)//觀察發現目前的行數和最大符號數相等
    {
        for(int k=1;k<j;k++)
        {
            printf(" ");
        }
        for(int l=1;l<=i-2*(j-1);l++)
        {
            printf("%c",x);
        }
        printf("\n");
    }
    for(int j=1;j<=i/2;j++)
    {
        for(int k=1;k<=i/2-j;k++)
        {
            printf(" ");
        }
        for(int l=1;l<=j*2+1;l++)
        {
            printf("%c",x);
        }
        printf("\n");
    }
    printf("%d",r);

    return 0;
}



相關文章