思路:
1.根据输入的行数计算最后大叉的列数:
因为行数是奇数,一定存在最中间的一行,该行分为3部分 【左边是若干个
.
】 【中间是m个*
】【右边是若干个.
】
观察每行,行从0计数,每行空格数=行号;
故大叉宽度 = (n / 2) * 2 + m
2.逐行枚举,对每行控制打印*
的区域即可
3.考虑答案二维数组应开多大:
行数不超过1000,笔的宽度不超过行数,根据上面计算宽度的式子
[(n / 2) * 2 不超过1000] + m 不会超过2000
C++代码:
#include<iostream>
#include<cstring>
using namespace std;
const int N = 1010;
char g[N][N * 2];
int main(){
int w, n; cin >> w >> n;
int m = (n / 2) * 2 + w;
memset(g, '.', sizeof(g));
int l1 = 0, r1 = l1 + w, r2 = m, l2 = r2 - w;
for(int i = 0; i < n; i++){
for(int j = l1; j < r1; j++) g[i][j] = '*';
for(int j = l2; j < r2; j++) g[i][j] = '*';
l1++, r1++, l2--, r2--;
}
for(int i = 0; i < n; i++){
for(int j = 0; j < m; j++) cout << g[i][j];
cout << endl;
}
return 0;
}