首页 > 其他 > 详细

打印沙漏编程总结

时间:2019-02-16 13:48:36      阅读:133      评论:0      收藏:0      [点我收藏+]

7-1 打印沙漏 (20 分)
本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“”,要求按下列格式打印
****
***



  • 所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先从大到小顺序递减到1,再从小到大顺序递增;首尾符号数相等。
    给定任意N个符号,不一定能正好组成一个沙漏。要求打印出的沙漏能用掉尽可能多的符号。
    输入格式:
    输入在一行给出1个正整数N(≤1000)和一个符号,中间以空格分隔。
    输出格式:
    首先打印出由给定符号组成的最大的沙漏形状,最后在一行中输出剩下没用掉的符号数。
    输入样例:
    19
    输出样例:
    ****
    ***


  • 2
    1)实验代码

    include<stdio.h>

    include<math.h>

    int main()
    {
    int i,j,k,a,b,c,d=0;;
    char op;
    scanf("%d %c",&a,&op);
    for(i=3;;i=i+2)//用循环试出菱形最长一条的星数,要从星数为3的一边算起
    {
    c=i*2;//菱形有上下对称,算总数要乘2.
    d=d+c;//把每边的星数相加,算总数 ,总数只有大于或等于输入数的情况,大于就是多加了一行
    if(d+1>a)
    {
    i=i-2;//i是最长一层的星数
    break;
    }
    if(d+1==a)
    {
    break;//总数刚刚好,没有多加一层,直接输出i
    }
    }
    int z=0;//计算打印出来的星数
    int g=i;//i同时也是从上往下数菱形的层数
    int e=(i-1)/2;int f=e;//空格数最多为e,然后逐层递减
    for(int h=1;h<=g;h++)//菱形层数
    {
    for(j=fabs(e);j<f;j++)
    {
    printf(" ");//星前空格数
    }
    for(int k=fabs(i);k>0;k--)
    {
    printf("%c",op); //每一层的星数
    z++;
    }
    printf("\n");
    e=e-1;//用绝对值让空格数从少到多,再到少。
    i=i-2;//每层星数相差两个
    if(i==-1)
    {
    i=i-2;//当i=1时,i-1=-1,则i=-1时,又输出一个星,一颗星的有了两层,需要将i变成-3.
    }
    }
    printf("%d",a-z);
    return 0;
    }

2)设计思路
技术分享图片

3)本题调试过程碰到问题及解决办法
这题以前做过,有印象,这次做没有遇到问题,一次性通过。

4).运行结果截图
技术分享图片

打印沙漏编程总结

原文:https://www.cnblogs.com/liu2687479342/p/10387483.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!