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

    题目描述:

      

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

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

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

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

    输入格式:

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

    输出格式:

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

    输入样例:

    19 *
    

    输出样例:

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

     题解基础嵌套for循环变形,难点在于运用肉眼观察法找出符号*的总数N和每行按等差数列1,3,5...分布的数字前n项和Sn的规律

    即:

    Sn = n*n;

    Tn = 2Sn -1;

    通过此关系式在代码中逆向推出n的范围以及剩余符号res的值

    还有一个注意点是单行*只需要输出一次,打印沙漏下方的时候要注意空格和行数的关系

     1 #include<stdio.h>
     2 int main()
     3 {
     4     char c;
     5     int N;
     6     int n;
     7     scanf("%d %c",&N,&c);
     8     //寻找小n的值
     9     if(N<7)
    10         n = 1;
    11     else
    12     {
    13     for(int i=1;i<N;i++)
    14     {
    15          if(2*i*i-1>N)
    16          {
    17              n = i-1;
    18              break;
    19          }
    20     } 
    21     }
    22     //循环打印
    23     int res = N-(2*n*n-1);
    24     for(int i=n;i>0;i--)
    25     {
    26         for(int k=i;k<n;k++)
    27         {
    28             printf(" ");
    29         }
    30         for(int j=2*i-1;j>0;j--)
    31         {    
    32             printf("%c",c);
    33         }
    34         
    35         printf("
    ");
    36         
    37     }
    38     
    39     for(int i=0;i<n-1;i++)
    40     {
    41         for(int j=i;j<n-2;j++)
    42         {
    43             printf(" ");
    44         }
    45         for(int k=0;k<2*(i+2)-1;k++)
    46         {
    47             printf("%c",c);
    48         }
    49         printf("
    ");
    50     }
    51      printf("%d
    ",res);
    52     
    53 return 0;    
    54 } 
  • 相关阅读:
    623. Add One Row to Tree 将一行添加到树中
    771. Jewels and Stones 珠宝和石头
    216. Combination Sum III 组合总数三
    384. Shuffle an Array 随机播放一个数组
    382. Linked List Random Node 链接列表随机节点
    向github项目push代码后,Jenkins实现其自动构建
    centos下安装Jenkins
    python提取批量文件内的指定内容
    批处理实现:批量为文件添加注释
    python抓取每期双色球中奖号码,用于分析
  • 原文地址:https://www.cnblogs.com/valar/p/6132259.html
Copyright © 2011-2022 走看看