题目1.打印沙漏
本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“”,要求按下列格式打印
****
***
-
所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先从大到小顺序递减到1,再从小到大顺序递增;首尾符号数相等。
给定任意N个符号,不一定能正好组成一个沙漏。要求打印出的沙漏能用掉尽可能多的符号。
1)实验代码#include<stdio.h> int main(void) { int i,N,sum,high,r,d,k; char c; scanf("%d %c",&N,&c); sum=0; for(i=1;sum<=N;i++) { sum=2*i*i-1; } high=i-2; sum=2*high*high-1; r=N-sum; for(d=high;d>0;d--) { if(d<high) { for(k=high-d;k>0;k--) printf(" "); } for(i=2*d-1;i>0;i--) printf("%c",c); printf("\n"); } for(d=2;d<=high;d++) { if(d<high) { for(k=high-d;k>0;k--) printf(" "); } for(i=2*d-1;i>0;i--) printf("%c",c); printf("\n"); } printf("%d\n",r);
}
2)设计思路
一:首先观察组成沙漏的数量,可以自己再纸上画一下依次为1、7、31,会发现组成沙漏的数目满足2ii-1,而沙漏的每一层与高满足2d-1。
二:定义相关整型变量和字符型变量,输入数字和字符。
三:sun赋值为零,进入循环,i从1开始,如果sun小于输入的数,运行sum=2ii-1直到循环结束,此时sun的值刚好能组成一个沙漏,r=N-sum,r储存多余的字符,沙漏的高为i-2。
四:开始打印上部分,把高的值赋给d,进入循环,根据2d-1打印每层的字符数,然后换行,注意每打印下一行就要多打印出一个空格。
五:打印下部分,下部分的高为high-1,通过循环打印下部分,方法与打印上部分相同。
六:打印完后,输出多余的字符数,结束。
3)本题调试过程碰到问题及解决办法
问题:开始的时候没有找到漏斗数量的规律。
解决办法:在网上查找资料,调试。
4)运行结果截图