多组输入,针对每行输入,输出用“* ”组成的“空心”正方形,每个“* ”后面有一个空格。

可能上面的问题大家没有读懂,它的实际效果是这样的。

 多组输入数据,由输入的数字来组成相应的空心正方形。

我最先看见这道题时,没有注意到星号后面跟着一个空格,于是我运行出来的效果时这样的:

我再那里左看右看的,硬是感觉一点也不像,才发现我没有把题看好。(苦命的孩子呀)

注意:星号后面有一个空格,所以我们可以把”* “(星号和空格)看作是一个整体。我们观察空心正方形时,会发现这样的规律。

假设我们输入的数是a,那么四条边,我们可以这样表示

	if (((i == 0) || (i == a - 1)) || ((j == 0) && ((i != 0) || (i != a - 1))) || 
((j == a-1 ) && ((i != 0) || (i != a - 1))))

//((i == 0) || (i == a - 1))//表示顶边和地边,i可以把它想成二维数组中的行

//((j == 0) && ((i != 0) || (i != a - 1)))//表示左边,j可以把它想成二维数组中的列,而且不包含第0列中的第一个点和最后一个点

((j == a-1 ) && ((i != 0) || (i != a - 1)))//表示右边,而且不包含第a-1列中的第一个点和最后一个点

 但是一定要把握好与或运算,而且括号的使用也一定要恰当,稍不注意就会错!

那么接下来我们就来看看整体的代码:

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>

int main()
{
	int a = 0;
	while (scanf("%d", &a) != EOF)
	{
		for (int i = 0; i < a; i++)
		{
			for (int j = 0; j < a; j++)
			{
				if (((i == 0) || (i == a - 1)) || ((j == 0) && ((i != 0) || (i != a - 1))) || 
			((j == a-1 ) && ((i != 0) || (i != a - 1))))
				{
					printf("* ");
					
				}
				else
				{
					printf(" ");
				}
			}
			printf("\n");//一行打印完后,我们换行接着打印下一行。
		}
	}
	return 0;
}

我们来看看运行效果:

 OH!WHAT?WHY?究竟是哪里错了,这不科学呀。为什么最后一列会出现在那个地方呢?我在那里调整了半天,想着调整最后一行   j==2*a-1,但还是不行!

是哪里出了问题?就当我准备放弃去看看别人的思路时,我还是决定还是再想一想!突然想到前面是把星号和空格看作一个整体,但其实占据着两个位置。那么下面打印空格时,是不是也应该是两个空格呢?

是的,是两个空格,那么为什么最后一列出现在这里就讲得通了!

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>

int main()
{
	int a = 0;
	while (scanf("%d", &a) != EOF)
	{
		for (int i = 0; i < a; i++)
		{
			for (int j = 0; j < a; j++)
			{
				if (((i == 0) || (i == a - 1)) || ((j == 0) && ((i != 0) || (i != a - 1))) || 
			((j == a-1 ) && ((i != 0) || (i != a - 1))))
				{
					printf("* ");
					
				}
				else
				{
					printf("  ");
				}
			}
			printf("\n");//一行打印完后,我们换行接着打印下一行。
		}
	}
	return 0;
}

运行效果展示:


  终于对了,但是我去看别人写的代码时,我心态崩了,他们写的好简单啊!

没事,毕竟是写出来了!(只能这样安慰自己了)


从中可以看出,原来我们有时离成功那么近,是不是应该咬牙多坚持一下呢,或许就真的成功了!!!

 感兴趣的伙伴可以去了解其他的简单解题方法哦,今天就到此了,拜拜咯!

  • 22
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

并不会

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值