• 打印沙漏


    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) 

        {

            c=i*2;. 

            d=d+c;/*把每边的星数相加,算总数 ,总数只有大于或等于输入数的情况,大于就是多加了一行 */

            if(d+1>a)

            { 

                i=i-2; 

                break;

            }

            if(d+1==a)

            {

                break;

            } 

        }

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

            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)运行结果截图

  • 相关阅读:
    解决英文版Windows中软件乱码问题
    退出程序时进行确认提醒
    Dreamweaver插件,FireFox插件名称集合
    网页炸弹根本就不算技术
    虚拟格式化硬盘
    当前上下文中不存在名称“Server”的原因
    ASP脚本在Webshell下的安全解决方案
    ASP.NET关于http/1.1 500 Server Error 的解决办法
    在网页文件中插入QQ强制聊天
    删除visual studio最近打开的项目列表
  • 原文地址:https://www.cnblogs.com/tuziwangjj/p/10413060.html
Copyright © 2020-2023  润新知