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 ****************************************************************/
原文地址:https://www.cnblogs.com/dzzy/p/4605059.html