当前位置:   article > 正文

2024年最全L1-002 打印沙漏 (20分)------使用c和python实现!

打印沙漏

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

输入样例:

===================================================================

19 *

输出样例:

===================================================================





2

解题思路:

===================================================================

**①我们观察题目要求输出图形是漏斗形状,分为一上一下两半部分,单看上半部分规律是:1,3,5,7,9…;但看下半部分也是同样规律。

②而且,注意图形中空格的话,我们只需要考虑左边部分的空格,右边部分的可以通过每输出一行就换行实现。

③所以,思路明了,最先做的是要计算出输入个数个的*可以排多少层。**

1.c代码实现:

======================================================================

#include <stdio.h>

int main()

{

int n;

char a;

scanf(“%d %c”,&n,&a);

int sum = 1; //所需*个数

int i = 1; //上半部分层数

while(sum<=n) //此处通过每行图形的规律计算出给定个数的*可以排几层

{

sum+=2*(2*(i+1)-1); //第一层是一个*,初始化时已经给出。每行的个数的规律是:2n-1,但是上下两半部分,所以整体乘2

if(sum<=n)

i++;

}

//输出上半部分

int j,k;

for(j=0;j<i;j++) //j<i是上半部分层数,控制上半部分层数

{

for(k=0;k<j;k++) //输出空格,上半部分空格个数和行数有关,第一行0个;第二行1个。

{

printf(" ");

}

for(k=0;k<(2*(i-j)-1);k++) //输出*,上半部分总层数为i层,通过(i-j)控制3,5,7,9…反过来输出为9,7,5,3…

{

printf(“%c”,a);

}

printf(“\n”);

}

//输出下半部分

for(j=2;j<=i;j++) //下半部分少了第一层,直接从第二层开始。最大层数为上半部分层数

{

for(k=0;k<i-j;k++) //空格的个数依然和层数有关。总层数-目前层数即为空格个数

{

printf(" ");

}

for(k=0;k<2*j-1;k++) //*个数直接按规律输出:1,3,5,7…

{

printf(“%c”,a);

}

printf(“\n”);

}

printf(“%d”,(n-(sum-2*(2*(i+1)-1)))); //注意:计算层数的循环中sum+=2*(2*(i+1)-1)可能会多加一次,也就是多加两层的*的个数。

}

最后

不知道你们用的什么环境,我一般都是用的Python3.6环境和pycharm解释器,没有软件,或者没有资料,没人解答问题,都可以免费领取(包括今天的代码),过几天我还会做个视频教程出来,有需要也可以领取~

给大家准备的学习资料包括但不限于:

Python 环境、pycharm编辑器/永久激活/翻译插件

python 零基础视频教程

Python 界面开发实战教程

Python 爬虫实战教程

Python 数据分析实战教程

python 游戏开发实战教程

Python 电子书100本

Python 学习路线规划

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里无偿获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/秋刀鱼在做梦/article/detail/935707
推荐阅读
相关标签
  

闽ICP备14008679号