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

    一、题目:

      题目链接

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

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

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

      再从小到大顺序递增;首尾符号数相等。给定任意N个符号,不一定能正好组成一个沙漏。要求打印出的沙漏能用掉尽可能多的符号。

    二、输入格式:

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

    三、输入样例:

      19 *

     

    四、输出样例:

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

     

    五、设计思路:

      为了方便叙述,我先假设用户需要打印的符号的个数为N,需要打印的符号是*;

      1,首先我们通过观察该图案,利用等差数列的求和公式可以得到一个规律:第n个图案所包含*的个数为2n2-1个;

      2,然后根据用户输入的N来判断最多可以打印第几个完整图案,例如,如果用户输入19,那么令2n2-1=19,n就约等于3,

        也就是说最多可以打印出第三个图案的所有*;

      3,将我们第二步得到的n代入到2n2-1中,计算出来刚好打印完图案所需要的*的个数,

        也就是说如果用户输入19,那么最多可以打印出第三个图案的所有*,打印该图案所需符号的个数为2*3- 1=17;

      4,最后将用户输入的N减去第三步计算出的2n2-1,可以得到打印完后多出来*的个数,即最后多出符号的个数为:N-(2n2-1),

        如果用户输入19,那么最多可以打印出第三个图案的所有*,打印该图案所需符号的个数为2*3- 1=17,

        最后多出来的*个数为19-17=2;

      5,至于打印出图案的具体代码就是通过三层循环嵌套来实现的,第一层控制打印行数,第二层控制打印控制打印空格数,第三层控制打印符号的个数。

    六、完整代码:

    #include<stdio.h>
    #include<math.h>
    int main()
    {
    
        int number;
        char ch;
        int n;
        int i,j,k;
        scanf("%d %c",&number,&ch);
        //通过观察我们可以知道第n个图案,需要打印的符号个数为2*n*n-1;
        //2*n*n-1=number ==> n = sqrt((number+1)/2)
        n = sqrt((number+1)/2);
        //判断最后多出来的图案的个数
        int res = number - (2*n*n-1);
        //打印倒三角图案
        //控制打印行数
        for (i = n; i >= 1; i--)
        {
            //控制每行前空格数
            for (k = 1; k <= n-i; k++) {
                    printf(" ");
            }
            //控制每图案的个数
            for (j = 1; j <= 2*i-1; j++) {
                printf("%c",ch);
            }
            printf("
    ");
        }
       //打印正三角图案
       //控制打印行数
       for (i = 2; i <= n; i++)
        {
            //控制每行前空格数
            for (k = 1; k <= n-i; k++) {
                    printf(" ");
            }
            //控制每图案的个数
            for (j = 1; j <= 2*i-1; j++) {
                printf("%c",ch);
            }
            printf("
    ");
        }
            printf("%d
    ",res);
        // system("pause");
        // getch();
        return 0;
    }

     

    七、打印效果:

     

  • 相关阅读:
    散点图增加趋势线
    asp.net自动刷新获取数据
    jQuery在asp.net中实现图片自动滚动
    tornado 学习笔记一:模板
    node.js 学习笔记二:创建属于自己的模块
    mysql 5.6 innodb memcache 操作学习一
    unicode,str
    node.js 学习笔记四:读取文件
    gevent 学习笔记一
    while 循环居然可以用else
  • 原文地址:https://www.cnblogs.com/TomHe789/p/12381910.html
Copyright © 2011-2022 走看看