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

题目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("
");

    }
    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("
");
    }
    printf("%d
",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)本题调试过程碰到问题及解决办法

问题:开始的时候没有找到漏斗数量的规律。
解决办法:在网上查找资料,调试。
4)运行结果截图

原文地址:https://www.cnblogs.com/jk-liulei/p/10401353.html