牛客网C语言BC-6 牛牛的字符菱形(循环思路)

题目如图

想要打印出这种规则图形一般都以对角线为分开点,比如这道题对角线上部分有三横(包括对角线在内),对角线下部分有两横(不包括对角线)

那么在打印规则图形时候,我们可以先进行上半部分的打印,然后进行下半部分的打印

接下来开始讲解

我们可以设对角线上半部分有n行,那在题目中就令n=3;

想打印上半部分的三横,我们可以每次打印完一横后,再打印第二横,最后打印第三横

总共打印三次,那么就会可以写出一个for循环,如图

int main( )
{
	int n = 3;
	for (int i = 1; i <= 3; i++) {
				

	}
}

在这三次循环中,每一次我们都需要先打出空格,再打出#号

那么简单分析一下,该怎么用循环表达出来

第一横打印2个空格,一个#号;;第二横打印1个空格,3个#号;;第三横打印0个空格,5个#号

那么用数学表示就是

第一横从1打印到(3-1)个空格;;;第二横从1打印到(3-2)个空格;;;

第三横从1打印到(3-3)个空格

第一横从1打印到2*1-1个#号;;第二横从1打印到2*2-1个#号
第三横从1打印到2*3-1个#号

可见这里的1,2,3的变量都是随着横竖的变化

把他们写成for循环就会变成(如下图)

#include<stdio.h>
int main()
{
		char a = '0';
		int n = 3;		//上半部分一共有三横
		scanf("%c", &a);
		for (int i = 1; i <= 3; i++) {		//上半部分一共打印三次
			for (int k = 1; k <= (n - i); k++) {		//从1打印到  n-i 个空格
				printf(" ");		
	
			}
			for (int j = 1; j <= 2 * i - 1; j++) {		//从1打印到 2*i-1 个#号
				printf("%c",a);
			}
			printf("\n");
		}
		//上半部分打印完毕

由此上半部分打印完毕,那么接下来开始讲解下半部分的打印

下半部分一共需要打印两次,并且接着上半部分打印即可;

打印两次的for循环

for (int i = 1; i <= 2; i++) {

	}

不难发现,第一横打印一个空格  第二横打印两个空格  那么空格从1开始打印到横数就够了

#号的话只需要自己想出随意一个公式即可;(公式不唯一!)

那么下半部分结合起来就可以写出for循环代码,如图

for (int i = 1; i <= 2; i++){		//打印两横

		//第一横打印一个空格  第二横打印两个空格  //从1打印到横数
		for (int j = 1; j <= i ; j++) {			//打印空格
			printf(" ");
		}

		for (int k = 1; k <= 4 - ( (2 * i) -1); k++)		//打印字符
		{	
			printf("%c", a);
		}
		printf("\n");
	}

总结代码如下

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
		char a = '0';
		int n = 3;		//上半部分一共有三横
		scanf("%c", &a);
		for (int i = 1; i <= 3; i++) {		//上半部分一共打印三次
			for (int k = 1; k <= (n - i); k++) {		//从1打印到  n-i 个空格
				printf(" ");		
	
			}
			for (int j = 1; j <= 2 * i - 1; j++) {		//从1打印到 2*i-1 个#号
				printf("%c",a);
			}
			printf("\n");
		}
		//上半部分打印完毕
	
		//下半部分一共两横
	for (int i = 1; i <= 2; i++){		//打印两横

			//第一横打印一个空格  第二横打印两个空格  //从1打印到横数
			for (int j = 1; j <= i ; j++) {			//打印空格
				printf(" ");
			}
	
			for (int k = 1; k <= 4 - ( (2 * i) -1); k++)		//打印字符
			{	
				printf("%c", a);
			}
			printf("\n");
		}
	}

创作不易,点点关注,感谢支持!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值