PAT

1027.打印沙漏

2018-08-03  本文已影响8人  yzbkaka

题目描述

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


如图

所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先从大到小顺序递减到1,再从小到大顺序递增;首尾符号数相等。给定任意N个符号,不一定能正好组成一个沙漏。要求打印出的沙漏能用掉尽可能多的符号。

输出描述

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

输入描述

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

输出例子

19 *

输入例子

正确输出

我的代码

#include<stdio.h>
#include<math.h>
int main(){
    int a,n,i,j,t;
    char b;
    scanf("%d %c",&a,&b);
    n=sqrt((a+1)/2);
    
    for(i=1;i<=2*n-1;i++){  //先输出第一行 
        printf("%c",b);
    }
    printf("\n");
    
    for(i=n-1;i>=1;i--){
        for(j=1;j<=(n-i);j++){  //按照规律输出前面的空格 
            printf(" ");
        }
        for(j=1;j<=2*i-1;j++){  //输出符号 
            printf("%c",b);
        }
        for(j=1;j<=(n-i);j++){  //按照规律输出后面的空格 
            printf(" ");
        }
        printf("\n");   
    } 
    
    for(i=2 ;i<=n;i++){        //反向输出 
        for(j=1;j<=(n-i);j++){
            printf(" ");
        }
        for(j=1;j<=2*i-1;j++){
            printf("%c",b);
        }
        for(j=1;j<=(n-i);j++){
            printf(" ");
        }
        printf("\n");   
    }
    printf("%d",a-(2*n*n-1));   //输出多余的符号数 
    return 0;
} 

我的分析

其实这道题算是比较基础的一道题,主要是要仔细的观察规律,然后逐个进行输出就可以了。

收获

关于求根号下的运算,如果对答案定义的是整型,则对答案存储的也是整型,系统会自动的把小数后面给省略。

上一篇 下一篇

猜你喜欢

热点阅读