解题思路
利用二维数组、坐标系来做。在菱形的上半区域,从第一行开始,第一行的“ * ”位于坐标(1,(n+1)/2)的位置,他的左下角和右下角都有一个“ * ”,所以可以建立一个二维数组,若第一行的“ * ”在数组的q[i][j]位置,则他的q[i+1][j-1]和q[i+1][j-1]都有一个“ * ”。在有“ * ”的位置用数字1标记,以此类推,将所有的位置都用“ 1 ”标记。
最后利用循环嵌套在有标记的地方输出“ * ”,没标记的地方输出“ ”即可。
代码如下
#include <iostream>
using namespace std;
const int N = 110;
int q[N][N];
int main()
{
int n;
cin>>n;
if(n==1)
cout<<"*"<<endl;
else
{
int y1=(n+1)/2,x1=1,y2=(n+1)/2,x2=1; //y1,x1代表左侧的“*”,y2,x2代表右侧的“*”
while(y1>1)
{
q[x1++][y1--] = 1;
q[x2++][y2++] = 1;
}
while(y1<=(n+1)/2)
{
q[x1++][y1++] = 1;
q[x2++][y2--] = 1;
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(q[i][j] == 1)
cout<<"*";
else
cout<<" ";
}
cout<<endl;
}
}
return 0;
}