有趣的小算法

今天练了一道题,可真的把我给累的,累就算了吧,人都快麻了,基础不行,没得办法,只能继续练啦,话不多说,来看看把我难住的题目

有些人觉得是不是比较简单啊,但我不觉得,因为我的基础真的差,因此看了别人怎么写的

但功夫不复有心人,无意中在下一个类似的题目,发现了一个小算法,也算是提升了吧!

话不多说来看看我写的这个题目和我的解题思路

这就是题目,来说说我的解题思路吧,当然小伙伴们可以先试着做做,看看能不能做出来

首先既然题目是想要这么一个图形,干脆我们就把这个图形先初始化为这个

第一步:

创建一个循环,打印出某行某列的数据 (打印出来是不是类似一个二维数组)

#include <stdio.h>
int main()
{
	int n = 0;   //把这个先看作边长
	while (scanf("%d", &n) > 0)  // 这里我们是为了输入我们想要几行几列的图形
	{
		int i = 0;
		for (i = 0; i <n; i++)
		{
			int j = 0;
			for (j = 0; j <n; j++)
			{
			    printf("*");
			}
			printf("\n");
		}
	}
	return 0;
}

第二步:

这一步很关键,我们打印出来这么一个矩形以后,我们是不是要利用分支语句来判断什么时候打印

“*” 什么时候打印“ ”  ,这里我想了很久,因为规律实在太难找了,给你们看看这张图

有没有发现什么规律,我们把这个图形比作一个二维数组,每个数组下标对应我们循环所控制的行和列,然后每一个“*”的位置的下标值加起来,有两种情况

① 行+列=正方形的边长-1  ------>  n-1(比作)

②行=列----i==j

这样的话我们是不是就可以确定打印“*” 的条件了,那么剩下的全是空格啦,对不对?是的

我们来看看整个代码

include <stdio.h>
int main()
{
	int n = 0;
	while (scanf("%d", &n) > 0)
	{
		int i = 0;
		for (i = 0; i <n; i++)
		{
			int j = 0;
			for (j = 0; j <n; j++)
			{
				if (i + j == n - 1 || i==j)   //只要有一个条件成立,就打印*,否则打印空格
				{
					printf("*");
				}
				else
				{
					printf(" ");
				}
			}
			printf("\n");
		}
	}
	return 0;
}
  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值