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("\n");

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("\n");

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("\n");

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("\n");

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("\n");     

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("\n");         

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", 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 ****************************************************************/

 

你可能感兴趣的:(打印)