2018秋寒假作业4—PTA编程总结1

时间:2021-01-23 21:55:50

题目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=2
ii-1直到循环结束,此时sun的值刚好能组成一个沙漏,r=N-sum,r储存多余的字符,沙漏的高为i-2。
四:开始打印上部分,把高的值赋给d,进入循环,根据2
d-1打印每层的字符数,然后换行,注意每打印下一行就要多打印出一个空格。
五:打印下部分,下部分的高为high-1,通过循环打印下部分,方法与打印上部分相同。
六:打印完后,输出多余的字符数,结束。
3)本题调试过程碰到问题及解决办法
2018秋寒假作业4—PTA编程总结1
问题:开始的时候没有找到漏斗数量的规律。
解决办法:在网上查找资料,调试。
4)运行结果截图
2018秋寒假作业4—PTA编程总结1