• 编程总结1


    本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个*,要求按下列格式打印

    *****
     ***
      *
     ***
    *****  
    

    所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先从大到小顺序递减到1,再从小到大顺序递增;首尾符号数相等。
    给定任意N个符号,不一定能正好组成一个沙漏。要求打印出的沙漏能用掉尽可能多的符号。

    输入格式:

    输入在一行给出1个正整数N(≤1000)和一个符号,中间以空格分隔。

    输出格式:

    首先打印出由给定符号组成的最大的沙漏形状,最后在一行中输出剩下没用掉的符号数。

    输入样例:

    19 *

    输出样例:

    *****
     ***
      *
     ***
    *****
    2  
    

    1)实验代码

    #include <stdio.h>
    int main()
    {
        int n;
        char op;
        scanf("%d %c",&n,&op);
        int a=1;
    int i=1;
        while(a<=n)
        {
            a=a+2*(2*(i+1)-1);
            if(a<=n)
                i++;
        }
        int j,h;
        for(j=1;j<=i;j++)
        {
                for(h=1;h<j;h++)
                printf(" ");
            for(h=1;h<=2*(i-j)+1;h++)
            {
                printf("%c",op);
            }
            printf("
    ");
        }
        for(j=2;j<=i;j++)
        {
               for(h=1;h<=i-j;h++)
                printf(" ");
            for(h=1;h<=2*j-1;h++)
            {
                printf("%c",op);
            }
            printf("
    ");
        }
        printf("%d",n-(a-2*(2*(i+1)-1)));
    return 0;
    }  
    

    2)设计思路

    第一步: 定义变量n,符号型变量op,scanf语句输入变量值;
    第二步:定义变量a,i,a表示所需要的符号数的最大值,将沙漏以中心为界分成两部分,i表示半个三角的行数,用while循环计算共需要多少个符号,及所得到的行数,以中心为起点,每增加一行符号增加2个;
    第三步:定义变量j,h,j表示行,先打印上半部分,每行的空格数为行数减1,j的初始值是1,则每行打印的符号数为2(i-j)+1个,打印完一行就换行。
    第四步:打印下半部分,打印上部分时已经打印了中心,则下部分从j=2开始,打印空格,打印符号,每行打印2*j-1个,打印完就换行;
    第五步:输出剩余符号数。

    3)本题调试过程碰到的问题及其解决办法

    1.不知如何在符号两边都打印空格;
    解决方案:只需打印符号左边的空格,右边直接换行。
    2.最后输出剩余符号数错误;
    解决方案:a在结束while循环后多加了个2(2(i+1)-1),a需减去1个2(2(i+1)-1),n再减a。

    4)运行截图

  • 相关阅读:
    用户使用情况报告
    项目验收与总结
    Beta阶段冲刺-6
    Beta阶段冲刺-5
    Beta阶段冲刺-4
    Beta阶段冲刺-3
    Beta阶段冲刺-2
    Beta阶段冲刺-1
    『编程题全队』Beata阶段项目复审
    『编程题全队』Beta 阶段用户使用调查报告
  • 原文地址:https://www.cnblogs.com/LeeMayZ/p/10390799.html
Copyright © 2020-2023  润新知