打印大X
小明希望用星号拼凑,打印出一个大X,他要求能够控制笔画的宽度和整个字的高度。
为了便于比对空格,所有的空白位置都以句点符来代替。
要求输入两个整数m n,表示笔的宽度,X的高度。用空格分开(0<m<n, 3<n<1000, 保证n是奇数)
要求输出一个大X
例如,用户输入:
3 9
程序应该输出:
***.....***
.***...***.
..***.***..
...*****...
....***....
...*****...
..***.***..
.***...***.
***.....***
(如有对齐问题,参看【图1.jpg】)
再例如,用户输入:
4 21
程序应该输出
****................****
.****..............****.
..****............****..
...****..........****...
....****........****....
.....****......****.....
......****....****......
.......****..****.......
........********........
.........******.........
..........****..........
.........******.........
........********........
.......****..****.......
......****....****......
.....****......****.....
....****........****....
...****..........****...
..****............****..
.****..............****.
****................****
其实就是熟悉数学算法
#include <iostream>
using namespace std;
int main()
{
int m,n;
cin>>m>>n;
for(int i=0;i<n;i++)
{
int a=(-1*abs(i-(n-1)/2))+(n-1)/2;
int b=n-m-1-2*a;
if(2*a+2*m>m+n-1)//输出中间一行有三部分的那一部分
{
for(int j=0;j<a;j++)
cout<<".";
for(j=0;j<m+n-1-2*a;j++)
cout<<"*";
for(j=0;j<a;j++)
cout<<".";
}
else//输出一行有五部分的那一部分
{
for(int j=0;j<a;j++)
cout<<".";
for(j=0;j<m;j++)
cout<<"*";
for(j=0;j<b;j++)
cout<<".";
for(j=0;j<m;j++)
cout<<"*";
for(j=0;j<a;j++)
cout<<".";
}
cout<<endl;
}
return 0;
}