2015藍橋杯C組試題 列印大X
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">暑假拿藍橋杯試題練練手,初探演算法。涉及到部分高中數學知識,卻忘了不少,根據影象寫個函式表示式就花了不少時間,得一點點分析。</span>
總算做出來了,很是興奮。
題目《列印大X》
小明希望用星號拼湊,打印出一個大X,他要求能夠控制筆畫的寬度和整個字的高度。
為了便於比對空格,所有的空白位置都以句點符來代替。
要求輸入兩個整數m n,表示筆的寬度,X的高度。用空格分開(0<m<n, 3<n<1000, 保證n是奇數)
要求輸出一個大X
例如,使用者輸入:
3 9
程式應該輸出:
***.....***
.***...***.
..***.***..
...*****...
....***....
...*****...
..***.***..
.***...***.
***.....***
再例如,使用者輸入:
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;
}