寒假作业1编辑总结
7-1 打印沙漏 (20 分)
本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印
*****
***
*
***
*****
所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先从大到小顺序递减到1,再从小到大顺序递增;首尾符号数相等。
给定任意N个符号,不一定能正好组成一个沙漏。要求打印出的沙漏能用掉尽可能多的符号。
输入格式:
输入在一行给出1个正整数N(≤1000)和一个符号,中间以空格分隔。
输出格式:
首先打印出由给定符号组成的最大的沙漏形状,最后在一行中输出剩下没用掉的符号数。
输入样例:
19 *
输出样例:
*****
***
*
***
*****
2
实验代码
1 #include<stdio.h> 2 int main() 3 { 4 int i,j=0,p=0,n,item=1,m=0,x=1; 5 char op; 6 scanf("%d %c",&n,&op); 7 if(n>=7&&n<=1000){ 8 while(n-item>((j+1)*2-1)*2){ 9 j++;p++; 10 item=item+((j+1)*2-1)*2; 11 } 12 j++;p++; 13 while(j>0){ 14 for(i=(2*j)-1;i>0;i--){ 15 while(m>0){ 16 printf(" "); 17 m--; 18 } 19 printf("%c",op); 20 } 21 printf("\n"); 22 j--;m=x;x++; 23 } 24 j=2;x--; 25 while(p>1){ 26 for(i=(2*j)-1;i>0;i--){ 27 while((m-2)>0){ 28 printf(" "); 29 m--; 30 } 31 printf("%c",op); 32 } 33 printf("\n"); 34 j++;p--;x--;m=x; 35 } 36 if(n-item>0) 37 printf("%d",n-item); 38 } 39 else 40 if(n<7&&n>0){ 41 printf("%c\n",op); 42 printf("%d",n-1); 43 } 44 return 0; 45 }
设计思路
本题设计过程中遇到的问题
通过错误提示后发现,原来当n小于7时,依然是要输出一个字符,然后再输出剩余字符的数量,所以我就加了一行代码就解决了。
实验结果截图