本題要求你寫個程序把給定的符號打印成沙漏的形狀。例如給定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 }