题目
金中食堂做的蛋糕总是做成菱形,琪琪希望蛋糕上能裱上一圈小花,她想请你再帮个忙,用电脑画出用“*”号组成的裱花形状,这将是个空心的菱形。
做题思路
先用一个for控制输入的行,然后将这个图形分为两部分,分别为(n*2)/2和后面的行(例如当n=5时将前5行为一个部分后4行为下一部分),用if语句将其分开,方法是if前面else后面.第一步分,看成自以第一行的(n*2)列为中心,依次向左向右输出*号,那么控制语句就可以写了.那么第二部分,就位自(n*2)/2行开始,依次向中间输出*号,直至最后一行.(按着思路看代码更好理解)
先看思路再看代码!
#include<iostream>
using namespace std;
int main()
{
int n;
cin >> n;
for (int i = 1; i <= n * 2 - 1; i++)//控制输出的行
{
if (i <= n )//第一步分
{
for (int j = 1; j <= n * 2 - 1;j++)//控制每一行的输入
{
if (j == n - i + 1 || j == n + i - 1) cout << "*";//控制*的输出
else cout << " ";//其余部分补空格
}
cout<<endl;//每一行输出完后为空格
}
else//第二部分
{
for (int k = 1; k <= n * 2 - 1; k++)//控制每一行的输入
{
if (k == i - n + 1 || k == 3 * n - i - 1) cout << "*";//控制*的输出
else cout << " ";//其余部分补空格
}
cout << endl;//换行
}
}
return 0;
}
最后说一下,两个j,和两个k,如何想到用这个算术式控制*的输出的.
先将第一部分看成在一个坐标轴里面,第五行第一个*坐标为(1,1)第四行第一个*坐标为(2,2)依次类推坐标.第二部分类推一下想法,也不用想坐标如何.也要想到但纯的数字形式是不能控制的,必须用变量,而唯一的变量就是i.
第一个j, 控制自左向右,那么第一行的坐标(5,5)第二行坐标为(4,4),此时的i分别为1和2,n一直为5,此时n-i+1就能表示出第一行的5和第二行的4,那么后面的也就可以.
第二个j, 由第一的j的想法那么n+i-1,就可以表示出来.
第一个i, 这是要控制第二部分的数据,第一个*为第i=6行,第2个,第二个为第i=7行,第3个,那么就可以推出表达式i-n+1.
第二个i, 此时依旧要用i的值控制,也需要一个大于i的定值和i一起控制是i行的某一列,2n太小,3n尝试一下可也,3n-i+1,发现就可以控制了.
可能解释的有点勉强,都思考一下,自己想明白就可以啦.