您的位置:首页 > 其它

打印大叉 蓝桥杯

2017-03-30 12:08 141 查看
打印大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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息