• 7-1 打印沙漏


    ---恢复内容开始---

    7-1 打印沙漏 (20 分)

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

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

    所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先从大到小顺序递减到1,再从小到大顺序递增;首尾符号数相等。

    给定任意N个符号,不一定能正好组成一个沙漏。要求打印出的沙漏能用掉尽可能多的符号。

    输入格式:

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

    输出格式:

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

    输入样例:

    19 *
    

    输出样例:

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

    实验代码:

    #include<stdio.h>
    #include<math.h>
    int main()
    {
         int a,b,c,n,i,j,m,k,N,h,e;
         char ch;
         b=h=1;
         scanf("%d %c",&N,&ch);
         if(N==1){
              printf("%c ",ch);
              printf("%d",h-1);
              return 0;
         }
         for(i=c=0;h<=N;){
              i++;
              b=b+2;
              c=c+b;
              h=2*c+1;
         }
         j=i;
         for(i;i>0;i--){
              n=1+2*(i-1);
              m=(b-n-2)/2;
              e=m;
              if(m!=0){
                   for(m;m>0;m--){
                        printf(" ");
                   }
              }
              for(n;n>=0;n--){
                   if(n==0){
                        printf(" ");
                   }else{
                        printf("%c",ch);
                   }
              }
         }
         k=j-1;     

         for(k;k>0;k--){

              i++;
              n=1+2*i;
              m=(b-n-2)/2;
              e=m;
              if(m){
                   for(m;m>0;m--){
                        printf(" ");
                   }
              }
              for(n;n>=0;n--){
                   if(n==0){
                        printf(" ");
                   }else{
                        printf("%c",ch);
                        }
                   }
              }
              a=N-h+4*j+2;
              printf("%d ",a);
              return 0;
         }

    设计思路:

            思维导图链接:http://www.edrawsoft.cn/viewer/public/s/dfceb395480797

            先用for语句判断漏斗的总行数,再运用总行数的一半先打出漏斗的上半部分,再同理求漏斗的下半部分,

    但是,要注意N小于7的时候没有漏斗,只有一个字符,所以要特别说明,而从漏斗的基础往上和往下都是等差

    数列。

    错误代码的结果:忘记截图了,但是比如当N为1的时候需要特殊考虑。

    运行结果:

  • 相关阅读:
    Github Actions 中 Service Container 的使用
    EFCore 5 新特性 SaveChangesInterceptor
    使用 Xunit.DependencyInjection 改造测试项目
    WeihanLi.Npoi 1.11.0/1.12.0 Release Notes
    新版本 swagger 组件中 Servers 的 坑
    JDBC 规范中文版 4.2- 第五章 类和接口
    JDBC 规范中文版 4.2 -第四章 概览
    JDBC 规范中文版 4.2 -第三章 新特性
    JDBC 规范中文版 4.2 -第二章 目标
    Serve static assets with an efficient cache policy
  • 原文地址:https://www.cnblogs.com/huangnuocheng/p/10263971.html
Copyright © 2020-2023  润新知