L1-002 打印沙漏 (20 分)

2021-03-23  本文已影响0人  melody_yuan

题目要求

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

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

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

资源限制

  1. 时间限制:400ms
  2. 内存限制:64.0MB
  3. 代码长度限制:16KB

样例输入输出

输入格式:

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

输出格式:

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

输入样例:

19 *

输出样例

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

代码

满分代码如下:

#include<iostream>
#include<math.h>
using namespace std;
int main(){
    int n,m,i,j;
    char s;
    cin>>n>>s;
    m=sqrt((n+1)/2);
    for(i=0;i<m;i++){
        for(j=0;j<i;j++){
            cout<<' ';
        }
        for(j=i;j<2*m-i-1;j++){
            cout<<s;
        }
        cout<<endl;
    }
    for(i=1;i<m;i++){
        for(j=1;j<m-i;j++){
            cout<<" ";
        }
        for(j=m-i;j<m+i+1;j++){
            cout<<s;
        }
        cout<<endl;
    }
    cout<<n-2*m*m+1;
    return 0;
} 
上一篇 下一篇

猜你喜欢

热点阅读