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

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

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

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

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

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

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

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

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

假设我们输入的数是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 

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;
}

我们来看看运行效果:

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

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

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

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

#define _CRT_SECURE_NO_WARNINGS 1
#include 

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;
}

运行效果展示:

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


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

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


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

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

你可能感兴趣的:(算法)