打印大X
一、题目内容
题目描述
小明希望用星号拼凑,打印出一个大X,他要求能够控制笔画的宽度和整个字的高度。为了便于比对空格,所有的空白位置都以句点符来代替。
输入
要求输入两个整数m n,表示笔的宽度,X的高度。用空格分开(0<m<n, 3<n<1000, 保证n是奇数)
输出
输出对应的图形
样例输入
3 9
样例输出
***.....*** .***...***. ..***.***.. ...*****... ....***.... ...*****... ..***.***.. .***...***. ***.....***
二、思路分析
这种打印图案的题,注意找输入数据和行数列数以及打印的主图案(本题为*)之间的关系。因为题目保证n是奇数,所以可以将图划分为三部分,然后分别打印。(注意打印*的边界取等号问题)
1. 打印上半部分
2. 打印中间行
3. 打印下半部分
三、代码实现
#include <bits/stdc++.h>
using namespace std;
int main() {
int m, n;
cin >> m >> n;
//打印上半部分
for (int i = 1; i <= n / 2; i++) {
for (int j = 1; j <= m + n - 1; j++) {
if (j >= i && j < i + m || j <= m + n - i && j > n - i)
cout << '*';
else
cout << '.';
}
cout << endl;
}
//打印中间行
for (int j = 1; j <= m + n - 1; j++) {
if (j > n / 2 && j <= n / 2 + m)
cout << '*';
else
cout << '.';
}
cout << endl; //别忘了换行
//打印下半部分
for (int i = n / 2; i >= 1; i--) {
for (int j = 1; j <= m + n - 1; j++) {
if (j >= i && j < i + m || j <= m + n - i && j > n - i)
cout << '*';
else
cout << '.';
}
cout << endl;
}
return 0;
}
加油哦! 如有错误和需要改进完善之处,欢迎大家纠正指教。