记录值得记录下的事情

PAT-GPLT_L1-002. 打印沙漏

L1-002. 打印沙漏

时间限制 内存限制 代码长度限制 判题程序 作者
400ms 65536kB 8000B Standard 陈越

本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印

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

所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先从大到小顺序递减到1,再从小到大顺序递增;首尾符号数相等。

给定任意N个符号,不一定能正好组成一个沙漏。要求打印出的沙漏能用掉尽可能多的符号。

输入格式:

输入在一行给出1个正整数N(<=1000)和一个符号,中间以空格分隔。

输出格式:

首先打印出由给定符号组成的最大的沙漏形状,最后在一行中输出剩下没用掉的符号数。

输入样例:

19 *

输出样例:

*****
 ***
  *
 ***
*****
2

Code [C]

#include <stdio.h>
int main()
{
    int n;
    char c;
    scanf("%d %c", &n, &c);
    int sum=1;
    int i=1;
    while(sum<=n)
    {
        sum+=2*(2*(i+1)-1); //2n-1是一层的个数,乘以2代表两层一共需要的
        if(sum<=n)
            i++;
    }
    int j,k;
    for(j=0; j<i; j++) //打印上半部分
    {
        for(k=0; k<j; k++)
            printf(" ");
        for(k=0; k<2*(i-j)-1; k++)
        {
            printf("%c",c);
        }
        printf("\n");
    }
    for(j=2; j<=i; j++)
    {
        for(k=0; k<i-j; k++)
            printf(" ");
        for(k=0; k<2*j-1; k++)
        {
            printf("%c",c);
        }
        printf("\n");
    }
    printf("%d",n-(sum-2*(2*(i+1)-1)));
return 0;
}

标签: C, PAT, GPLT

添加新评论