码迷,mamicode.com
首页 > 其他好文 > 详细

PAT1027. 打印沙漏(20)

时间:2015-01-20 13:31:45      阅读:164      评论:0      收藏:0      [点我收藏+]

标签:

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

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

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

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

输入格式:

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

输出格式:

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

输入样例:

19 *

输出样例:

*****
 ***
  *
 ***
*****
2
思路:格式错误好多,不该打印的空格不要进行打印
技术分享
 1 #include <stdio.h>
 2 #include <string.h>
 3 char pattern[1010][1010];
 4 int main(int argc, char** argv) 
 5 {
 6     memset(pattern, ,sizeof(char)*1010*1010);
 7     int sum;
 8     char zifu;
 9     scanf("%d %c",&sum,&zifu);
10     int reminder;
11     if(sum>=7)
12     {
13         //rol需要重新计算 
14         int rol=0;
15         while(true)
16         {
17             if((rol*rol+2*rol)*2+1>sum)
18                break;
19             else
20                rol++;
21         }
22         rol--;
23     //    printf("%dfds",rol);
24         reminder=sum-(rol*rol+2*rol)*2-1;
25         int firlas=2*rol+1;
26         //进行赋值 
27         for(int i=0;i<rol;i++)
28         {
29             for(int j=i;j<firlas-i;j++)
30            {
31                     pattern[i][j]=zifu;
32            }    
33         } 
34        //中间
35         pattern[rol][firlas/2]=zifu;
36           //下面,从下往上打印 
37         for(int i=rol*2;i>rol;i--)
38         {
39             for(int j=2*rol-i;j<firlas-(2*rol-i);j++)
40                  pattern[i][j]=zifu;
41         } 
42        //进行打印上面 
43         for(int i=0;i<rol;i++)
44         {
45             for(int j=0;j<firlas-i;j++)
46             {
47                 printf("%c",pattern[i][j]);
48              }
49             putchar(\n);        
50         } 
51         for(int i=rol;i<2*rol+1;i++)
52         {
53             for(int j=0;j<firlas/2+i-rol+1;j++)
54             {
55                 printf("%c",pattern[i][j]);
56             }
57             putchar(\n);
58         }
59        }
60        else
61        {
62            reminder=sum-1;
63            printf("%c\n",zifu);
64     }
65         printf("%d\n",reminder);
66     
67     return 0;
68 }
View Code

 

PAT1027. 打印沙漏(20)

标签:

原文地址:http://www.cnblogs.com/GoFly/p/4235771.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!