本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定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 }
时间: 2024-12-24 20:01:18