首页 > 代码库 > PAT (Basic Level) Practise:1027. 打印沙漏(20)

PAT (Basic Level) Practise:1027. 打印沙漏(20)

【题目链接】

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

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

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

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

输入格式:

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

输出格式:

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

输入样例:

19 *

输出样例:

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

 

提交代码:

  1 #include <stdio.h>  2   3 int count(n)  4 {  5     if(n == 1)  6         return 1;  7     else  8         return count(n-1)+4*n-2;  9 } 10  11 void printf_t(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         printf_t(N, n-1, c);     30     } 31 } 32  33 void printf_b(int N, int n, char c) 34 { 35     int i; 36     if(n == N) 37     { 38         for(i = 0; i < 2 * n + 1; i++) 39             printf("%c", c); 40         printf("\n"); 41         return ;     42     } 43     else 44     { 45         for(i = 0; i < N - n; i++) 46             printf(" "); 47         for(i = 0; i < 2 * n + 1; i++) 48             printf("%c", c); 49         printf("\n"); 50         printf_b(N, n+1, c); 51     } 52 } 53  54 void printf_n(int n, char c) 55 { 56     int i, j; 57  58     for(i = n; i > 0; i--) 59     { 60         for(j = n - i; j > 0; j--) 61             printf(" "); 62         for(j = 0; j < 2 * i - 1; j++) 63             printf("%c", c); 64         printf("\n");      65     } 66      67     for(i = 1; i < n; i++) 68     { 69         for(j = n - i; j > 1; j--) 70             printf(" "); 71         for(j = 0; j < 2 * i + 1; j++) 72             printf("%c", c); 73         printf("\n");          74     } 75 } 76  77  78 int main(void) 79 { 80     char c; 81     int n, N, T1, T2; 82  83     scanf("%d %c", &N, &c); 84  85     n = 1; 86     while(N >= (T1 = count(n))) 87     { 88         n++; 89         T2 = T1; 90     } 91     n--; 92  93     //printf_t(n, n, c); 94     //printf_b(n-1, 1, c); 95     //printf("%d", N - T2); 96    97     printf_n(n, c); 98     printf("%d", N - T2); 99   100     return 0;101 }

 

PAT (Basic Level) Practise:1027. 打印沙漏(20)