牛客网C语言刷题总结之------循环输出图形

本文介绍了如何利用在线OJ(Online Judge)平台提升编程能力,特别是针对C语言的练习。推荐了牛客网和啊哈添柴两个刷题网站,并详细解析了牛客网上若干道图形输出题目,包括循环打印正方形、三角形、金字塔等,讲解了编程思路和代码实现。通过这些题目,读者可以掌握循环、条件判断等基础知识,并提升逻辑思维能力。
摘要由CSDN通过智能技术生成

在线OJ

想要提升自己的独立编程以及思考能力,刷题是必不可少的一种途径。而很多朋友不知道在哪刷题,怎么刷题,在这里我推荐在线OJ的形式,目前很多企业面试都采用的是这种方式,可以很好地查验程序员的水平能力。

简单推荐2个刷题网站:牛客网 - 找工作神器|笔试题库|面试经验|实习招聘内推,求职就业一站解决_牛客网

在线OJ网站 - 啊哈添柴

这期主要讲的是牛客网上的C语言相关题目。一个类型的我会做一个统一讲解,希望能得到大家支持!

牛客网  循环输出图形类题

先来看两道简单的练练手。

题目1(牛客98题):

 这题主要就是一个多组输入需要注意一下,这在我之前的一篇博客:https://mp.csdn.net/mp_blog/creation/editor/124146724 有具体介绍,我们直接来看一下这题的代码:

 当然也可以用while循环来写,效果是一样的。

牛客网99题和这道类似,就是多组打印正方形图案罢了,相信大家也没问题,这里指提供一下代码,主要还是讲下面的题目

题目2(牛客100题):

审题:多行输入,那么先将行数设出来放入循环中。 然后观察图形,是一个直角三角形,且行数与列数相等,那么我们就可以想到,嵌套两个循环将行和列 表示出来。外层表示行,内层表示列,这里每一列的内容要想清楚,是下层比上层多一字符。

 

代码如上图,要注意,每一列结束要记得换行,总是有人会将换行加在循环内。

牛客网101题和这题类似,只是将三角形倒了过来,其实本质还是一样的,只是列从上到下字符减少罢了,代码如下:

题目3(牛客102题):

 这种打印图形带空格的题目也是相当经典,我们碰到时,可以分两部分考虑,先打印空格,再打印其他字符图形。

观察图形:是个翻转的直角三角形,并且行列相等。 第一行有(行数-1)个空格,下面几行的空格依次减少,同时 ‘  *  ’ 个数是相反的规律。

依据上述分析,我们可以写出相应代码。

牛客网103、104题,金字塔的题目也是和此类似,主要注意空格和字符分别打印就行了,套路基本都是一样的。

再来看  题目4(牛客105题):

 这种类型的题看上去和上面的差不多,但是需要注意它是以中间一行为轴上下对称的,所以这种类型有两种思路:1、分为上半部分、中间轴和下半部分打印     2、将轴归到上半部分(或下半部分)打印。  两种思路我们分别来看一下:

第一种:

 第二种:

牛客网后面106~110题都是类似的套路去做,将上下部分 分开去做,多观察图形 多思考就能掌握了。

上述题目还可以引深一下,既然每一行字符数相差可以为1,那也可以为2,3......

比如这道题:

 每行字符数差值为2,同样也可以分为上下两部分去做,关键在于怎样表示这里每行的字符个数。

可以发现行差是等差数列 1,3,5... 就能采用等差数列公式去表示每行的字符。

代码如下:

 

 以  2*i-1 约束字符个数,就可以达到效果。同样的,如果是行差为3,为4...... ,也都是类似的方法。

题目5(牛客网111题):

 这类题目可以看成是一个内部都填满的图形将中间掏空得到的图形。

思路:在正方形的基础上加上一些限制条件将内部掏空。

这题的话,就是以行数和列数为限制条件掏空内部,代码如下:

 同样的112题也是这道理:

 这里的限制条件就变成了 :行数、列数以及对角线。

题目6(牛客114):

牛客网上循环输出图案还有两道相对来说综合一些的题目,就是最后两道关于圣诞树的题目:

先看114题:

 首先看到这题我们不要被吓到,只不过相较于前面一些基本图案,要稍微复杂综合一些,只要把它想象成多种简单图形的组合就可以做出来。

第一步观察图形,这个圣诞树其实可以看做是树干、树柄两个部分组成的,而上面的树干部分又可以看成由多个小三角形组成的,并且它们的组成也有规律。

第二步看输入对应的图案,输入2,对应出现的是两层小三角形、长为2的树柄构成的图案,输入3,对应的就是3层小三角形图案,长为3的树柄构成的小三角形。

第三步:观察其中空格的规律:自上至下左右空格都在依次减少1,小三角形的第一层 * 与 *之间都差5个空格,第二层差3,第三层差1 。

观察到这些后,我们就可以开始尝试写一写了。

一、先输入高度,根据上面分析,我们知道层数是高度*3,所以再设一个值,放层数。

二、将圣诞树分成两部分打印,先打印树干、再打印树柄。

三、树干部分以输入为条件将其分层(小三角形),输入2就有2层,输入3就有3层。

for (i = 1; i <= h; i++)
	

 将一层小三角形当成一个整体,进行循环,这里我们要思考怎样控制循环继续和结束,就是用层数控制。

四、一层里面有三行,我们一行一行打印,第一行:

	for (int a = n - 1; a > 0; a--)
		{
			printf(" ");
		}
		for (k = 1; k <= i; k++)
		{
			printf("*     ");
		}
		printf("\n");

这里空格的控制还需要一个变量,我们可以发现2层树第一层空格数为5,   3层树空格数为8,也就是3*h-1 。 * 字符通过层数来控制,一层就是一个 * ,后面的空格忽略,到2层就是*     * ,打印完后换行。

第二行,同样的:

for (int b = n - 2; b > 0; b--)
		{
			printf(" ");
		}
		for (k = 1; k <= i; k++)
		{
			printf("* *   ");
		}
		printf("\n");

第三行:

	for (int c = n - 3; c > 0; c--)
		{
			printf(" ");
		}
		for (k = 1; k <= i; k++)
		{
			printf("* * * ");
		}
		printf("\n");

这是一层小三角形的打印,我们根据高度h来确定层数,所以再循环的最后加上一个n=n-3,作为循环的结束条件,就能实现层层打印。

详细代码如下:

 五、打印树柄,这就比较简单了。规律就是:输入的高度h对应树柄的长度。

 

 最后来看一下效果:

 我们的圣诞树就完成了!

下面的115题和这个是类似的,相信大家有能力自己完成的吧!

  • 4
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值