• 1217: 打印沙漏


    From: 合工宣OJ http://xcacm.hfut.edu.cn/problem.php?id=1217

    时间限制: 1 Sec  内存限制: 128 MB

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

    这里写图片描述

    所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先从大到小顺序递减到1,再从小到大顺序递增;首尾符号数相等。给定任意N个符号,不一定能正好组成一个沙漏。要求打印出的沙漏能用掉尽可能多的符号。

    输入

    输入在一行给出1个正整数N(<=1000)和一个符号,中间以空格分隔 输出 首先打印出由给定符号组成的最大的沙漏形状,最后在一行中输出剩下没用掉的符号数。

    样例输入

    19 * 

    样例输出

    这里写图片描述

    本题只需要循环输出判断即可,实现过程可能会有一些绕路。

     1 #include <stdio.h>
     2 #include<iostream>
     3 using namespace std;
     4 int ui(int n)
     5    {
     6        if(n == 1)
     7            return 1;
     8        else
     9            return ui(n-1)+4*n-2;
    10    }
    11   void al(int N, int n, char c)
    12   {
    13       int i;
    14       if(n == 1)
    15       {
    16           for(i = 0; i < N - n; i++)
    17               printf(" ");
    18           printf("%c", c);
    19           printf("
    ");
    20           return ;    
    21       }    
    22       else
    23       {
    24           for(i = 0; i < N - n; i++)
    25               printf(" ");
    26          for(i = 0; i < 2*n-1; i++)
    27               printf("%c", c);
    28           printf("
    ");
    29           al(N, n-1, c);    
    30       }
    31   }
    32  void pl(int N, int n, char c)
    33   {
    34       int i;
    35      if(n == N)
    36       {
    37          for(i = 0; i < 2 * n + 1; i++)
    38               printf("%c", c);
    39           printf("
    ");
    40         return ;    
    41       }
    42       else
    43       {
    44           for(i = 0; i < N - n; i++)
    45               printf(" ");
    46           for(i = 0; i < 2 * n + 1; i++)
    47               printf("%c", c);
    48           printf("
    ");
    49           pl(N, n+1, c);
    50       }
    51   }
    52   void printf_n(int n, char c)
    53   {
    54       int i, j;
    55 
    56       for(i = n; i > 0; i--)
    57       {
    58          for(j = n - i; j > 0; j--)
    59               printf(" ");
    60           for(j = 0; j < 2 * i - 1; j++)
    61               printf("%c", c);
    62           printf("
    ");     
    63       }
    64      for(i = 1; i < n; i++)
    65       {
    66           for(j = n - i; j > 1; j--)
    67               printf(" ");
    68           for(j = 0; j < 2 * i + 1; j++)
    69               printf("%c", c);
    70           printf("
    ");         
    71      }
    72   }
    73  int main(void)
    74   {
    75       char c;
    76       int n, N, a,b;
    77     while(scanf("%d %c", &N, &c)!=EOF)
    78     {
    79       n = 1;
    80      while(N >= (a =ui(n)))
    81      {
    82          n++;
    83          b =a;
    84      }
    85     n--;
    86     printf_n(n, c);
    87       printf("%d
    ", N - b);
    88     }
    89      return 0;
    90  }
    91 
    92 /**************************************************************
    93     Problem: 1217
    94     User: 2014217052
    95     Language: C++
    96     Result: 正确
    97     Time:41 ms
    98     Memory:1504 kb
    99 ****************************************************************/
  • 相关阅读:
    overflow+文档流
    《大器晚成》读后感 读书笔记
    《指标陷阱》读后感 读书笔记
    《无限的游戏》读后感 读书笔记
    《最蓝的眼睛》读后感 读书笔记
    《正常人》读后感 读书笔记
    《玉米人》读后感 读书笔记
    《科举史》读后感 读书笔记
    《糖的故事》读后感 读书笔记
    《蒙克传》读后感 读书笔记
  • 原文地址:https://www.cnblogs.com/dzzy/p/4605059.html
Copyright © 2020-2023  润新知