1. 程式人生 > >2015藍橋杯C組試題 列印大X

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;
}