寒假作业1打印沙漏总结

编程总结

7-1 打印沙漏 (20 分)

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

*****

 ***

  *

 ***

*****

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

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

1)实验代码:

#include <stdio.h>

int main(void)

{

       int N,number,temp,a,sum,count,i,j;

       char ch;

       temp=7;a=3;

       scanf("%d %c",&N,&ch);

       if(N>1000||N<1) return 0;

       if(N<temp&&N>=1){

       printf("%c\n",ch);

              count=N-1;

       }

       else{

       do{

              if(N>=temp){

                    

                     if(N<(temp+(a+2)*2)){

                            break;

                     }else if(N==(temp+(a+2)*2)){

                                 temp=temp+(a+2)*2;

                                 a=a+2;

                                   break;

                     }else{

                                   temp=temp+(a+2)*2;

                                   a=a+2;

                     }

              }

       }while(1);

               sum=a;

        number=(a/2);

       for(i=0;i<number;i++){

              for(j=0;j<sum-a-i;j++){

                     printf(" ");

              }

              for(j=0;j<a;j++){

                     printf("%c",ch);

              }

              printf("\n");

              a=a-2;

       }for(i=number;i>=0;i--){

              for(j=0;j<sum-a-i;j++){

                     printf(" ");

              }

              for(j=0;j<a;j++){

                     printf("%c",ch);

              }

              printf("\n");

              a=a+2;

       }

       count=N-temp;

   }

       printf("%d",count);

       return 0;

 }

2)设计思路:

第一步:首先要定义自己需要的变量,

第二步:观察完图形,发现是对称图形,要打印漏斗最少需要七个三行;

第三步:要确定打印漏斗所需要的符号数和你给定符号能打印了多少,还剩多少。

第四步:打印漏斗的上部分和下部分,进行换行。

3)遇到的问题:

刚开始判断不了怎么打印第二部分,对漏斗形状的打印不是很熟;

4)解决方法:网上查找去找到解题思路,请教了大佬。

5)错误截图:

 

转载于:https://www.cnblogs.com/LeoQ/p/10413133.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值