zoukankan      html  css  js  c++  java
  • L1-002 打印沙漏

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

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

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

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

    输入格式:

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

    输出格式:

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

    输入样例:

    19 *
     

    输出样例:

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



    题解:

    设沙漏层数为h(必为奇数),符号的个数是(1+3+5+......+h)*2-1,就是两个三角形的个数-1。符号个数等于n的话,就可以求得h的大小,如果n偏大,那求出来的h就是用n最多能够堆出来的h;
    找到h后,就可以找规律堆沙漏了。分成两次,从上到下堆到个数为一,再从2开始堆。(思路是大佬的,谢谢大佬,大佬连接:https://www.cnblogs.com/LengYun/p/12539189.html)
    accode:

    int n, h;
    char x;
    int main()
    {
    cin >> n >> x;
    h = sqrt((n + 1) / 2);
    for (int i = h; i >=1; i--)
    {
    for (int j = 1; j <= h-i; j++)
    cout << " ";
    for (int j = 1; j <= i * 2 - 1; j++)
    cout << x;
    cout << endl;
    }
    for (int i = 2; i <= h; i++)
    {
    for (int j = 1; j <=h-i; j++)
    cout << " ";
    for (int j = 1; j <= i*2-1; j++)
    cout << x;
    cout << endl;
    }
    int ans = 2 * h * h - 1;
    cout << n-ans;
    return 0;
    }



  • 相关阅读:
    利用Python爬取疫情数据并使用可视化工具展示
    接口与多态
    defer 延迟调用
    Spring缓存注解
    SpringAOP
    Mybatis动态SQL语句
    SpringMVC
    Spring Boot入门
    vue中使用JS实现倒计时功能
    springboot使用aop注解在controller层打印请求和响应报文
  • 原文地址:https://www.cnblogs.com/Uiney117/p/14416912.html
Copyright © 2011-2022 走看看