zoukankan      html  css  js  c++  java
  • B1027打印沙漏

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

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

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

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

    输入格式:

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

    输出格式:

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

    输入样例:

    19 *
    
     

    输出样例:

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

    思路:

    •先划分三部分(往上扩展部分、中间一行、往下扩展部分)进行打印,在每个部分理清变量和打印符号或者空格的关系:

    •用row表示从第一行向外扩展的行数,i表示第几层,根据row确定空格个数row-i,打印字符个数根据层数等差数列求an

    问题:

    测试点1答案错误,输入:1 * ,发生错误。

    解决:

    边界问题,考虑最小边界。row初值不确定,因为在下面的循环中只能执行i=0,但是不满足if判断,所以此时row仍是不确定的值,所以发生错误,需要将row初始化为0。或将循环边界改成i<=n。

     1 #include <iostream>
     2 using namespace std;
     3 int main() {
     4     int n,row;//row是从第一行向外扩展的行数
     5     char c;
     6     cin >> n >> c;
     7     for (int i = 0; i <= n; i++) {
     8         if (2*i*i + 4 * i + 1 > n)
     9         {
    10             row = i - 1;
    11             break;
    12         }
    13     }
    14     for (int i = row; i >= 1; i--) {
    15         for (int j = 1; j <= row - i; j++)cout << " ";
    16         for (int k = 1; k <= 2 * i + 1; k++)cout << c;
    17         cout << endl;
    18     }
    19     for (int i = 1; i <= row; i++)cout << " ";
    20     cout << c << endl;
    21     for (int i = 1; i <= row; i++) {
    22         for (int j = 1; j <= row - i; j++)cout << " ";
    23         for (int k = 1; k <= 2 * i + 1; k++)cout << c;
    24         cout << endl;
    25     }
    26     cout << (n - (2 * row*row + 4 * row + 1));
    27     return 0;
    28 }
    作者:PennyXia
             
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    JavaScript中的数据类型转换
    JavaScript中的变量
    set_uid set_gid stick_bit 软硬链接
    chmod、chown、umask、lsattr/chattr
    环境变量、cp、mv、cat 等命令
    相对和绝对路径 mkdir cd rm 等命令
    linux 系统 目录,以部分及相关命令
    单用户模式 和救援模式 、以及相互登陆(免密)
    putty 、xshell的使用 和 putty 、xshell、 shell 间免密登陆
    vmware NAT 网络出现问题的解决方法
  • 原文地址:https://www.cnblogs.com/PennyXia/p/12290523.html
Copyright © 2011-2022 走看看