C語言實現 藍橋杯 歷屆試題 打印十字圖

試題 歷屆試題 打印十字圖

                                                                                  藍橋杯試題解答彙總鏈接

資源限制

       時間限制:1.0s 內存限制:256.0MB


問題描述

       小明爲某機構設計了一個十字型的徽標(並非紅十字會啊),如下所示:

在這裏插入圖片描述
對方同時也需要在電腦dos窗口中以字符的形式輸出該標誌,並能任意控制層數。


輸入格式

       一個正整數 n 表示要求打印圖形的層數。


輸出格式

       對應包圍層數的該標誌。


樣例輸入

樣例一:
1
樣例二:
3

樣例輸出

樣例一:
..$$$$$..
..$...$..
$$$.$.$$$
$...$...$
$.$$$$$.$
$...$...$
$$$.$.$$$
..$...$..
..$$$$$..
樣例二:
..$$$$$$$$$$$$$..
..$...........$..
$$$.$$$$$$$$$.$$$
$...$.......$...$
$.$$$.$$$$$.$$$.$
$.$...$...$...$.$
$.$.$$$.$.$$$.$.$
$.$.$...$...$.$.$
$.$.$.$$$$$.$.$.$
$.$.$...$...$.$.$
$.$.$$$.$.$$$.$.$
$.$...$...$...$.$
$.$$$.$$$$$.$$$.$
$...$.......$...$
$$$.$$$$$$$$$.$$$
..$...........$..
..$$$$$$$$$$$$$..

數據規模與約定

n<30

試題解析

以下爲n=2時的情況以o點爲座標原點建立平面直角座標系水平爲x軸,豎直方向爲y軸

. . $ $ $ $ $ $ $ $ $ . .
. . $ . . . . . . . $ . .
$ $ $ . $ $ $ $ $ . $ $ $
$ . . . $ . . . $ . . . $
$ . $ $ $ . $ . $ $ $ . $
$ . $ . . . $ . . . $ . $
$ . $ . $ $ $(O) $ $ . $ . $
$ . $ . . . $ . . . $ . $
$ . $ $ $ . $ . $ $ $ . $
$ . . . $ . . . $ . . . &
$ $ $ . $ $ $ $ $ . $ $ $
. . $ . . . . . . . $ . .
. . $ $ $ $ $ $ $ $ $ . .

結合題目給出的樣例觀察圖像不難發現這個圖像就是在中心十字形外圍n層十字架形狀的邊那麼現在就變成了線性規劃的問題:
根據規律我們可以得到幾個式子,當座標(x,y)滿足式子的時候就輸出$不滿足就輸出.
①y=0,-2≤x≤2;或x=0,-2≤y≤2;
②|y|=2a+2,|x|≤2或|x|=2a+2,|y|≤2;
③|y|=2a,2a≤|x|≤2a+2或|x|=2a,2a≤|y|≤2a+2;


代碼

#include<stdio.h>
#include<stdlib.h>
int right(int x,int y,int n){
	int a;// a用來確定他是第幾圈的
	for(a = n;a >= 1;a--){// 判斷是否是符合條件的點 
		if((abs(y)==2*a+2 && abs(x)<=2*a)||(abs(x)==2*a+2 && abs(y)<=2*a)){
			return 1;
		}else if((abs(y)==2*a && abs(x)>=2*a && abs(x)<=2*a+2)||(abs(x)==2*a && abs(y)>=2*a && abs(y)<=2*a+2)){
			return 1;
		}else if((y==0 && abs(x)<=2)||(x==0 && abs(y)<=2)){
			return 1;
		}
	}
	return 0;
}
int main(){
	int n=0;
	scanf("%d",&n);
	int i,j,len = 2*n+2;
	for(i = -len;i <= len;++i){
		for(j = -len;j <= len;++j){
			if(right(i,j,n)){// i,j分別對應座標軸的x,y 
				printf("$");
			}else{
				printf(".");
			}
		}
		printf("\n");
	}
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章