本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印
*****
***
*
***
*****
所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先从大到小顺序递减到1,再从小到大顺序递增;首尾符号数相等。
给定任意N个符号,不一定能正好组成一个沙漏。要求打印出的沙漏能用掉尽可能多的符号。
输入格式:
输入在一行给出1个正整数N(\le≤1000)和一个符号,中间以空格分隔。
输出格式:
首先打印出由给定符号组成的最大的沙漏形状,最后在一行中输出剩下没用掉的符号数。
输入样例:
19 *
输出样例:
*****
***
*
***
*****
2
代码如下:
1 #include<stdio.h> 2 void Print(int N,char c) 3 { 4 int i,j; 5 for(i=1;i<=(N+1)/2;i++) 6 { 7 for(j=1;j<i;j++) 8 printf(" "); 9 for(j=1;j<=N-2*(i-1);j++) 10 printf("%c",c); 11 printf("\n"); 12 } 13 for(i=1;i<=(N+1)/2-1;i++) 14 { 15 for(j=i;j<(N+1)/2-1;j++) 16 printf(" "); 17 for(j=1;j<=2*i+1;j++) 18 printf("%c",c); 19 printf("\n"); 20 } 21 } 22 int main() 23 { 24 int num,i; 25 char c; 26 scanf("%d %c",&num,&c); 27 if(num<7) 28 { 29 Print(1,c); 30 printf("%d\n",num-1); 31 } 32 else 33 { 34 int sum=1; 35 for(i=3;;i+=2) 36 { 37 sum = sum + i*2; 38 if(sum>=num) 39 break; 40 } 41 Print(i-2,c);//循环出来的时候,已经加了2,所以要减2,下面同理 42 printf("%d\n",num-sum+2*i); 43 } 44 return 0; 45 }
时间: 2024-10-22 20:35:58