今天练了一道题,可真的把我给累的,累就算了吧,人都快麻了,基础不行,没得办法,只能继续练啦,话不多说,来看看把我难住的题目
有些人觉得是不是比较简单啊,但我不觉得,因为我的基础真的差,因此看了别人怎么写的
但功夫不复有心人,无意中在下一个类似的题目,发现了一个小算法,也算是提升了吧!
话不多说来看看我写的这个题目和我的解题思路
这就是题目,来说说我的解题思路吧,当然小伙伴们可以先试着做做,看看能不能做出来
首先既然题目是想要这么一个图形,干脆我们就把这个图形先初始化为这个
第一步:
创建一个循环,打印出某行某列的数据 (打印出来是不是类似一个二维数组)
#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;
}