歷屆試題 列印十字圖 時間限制:1.0s 記憶體限制:256.0MB 時間限制:1.0s 記憶體限制:256.0MB 問題描述 小明為某機構設計了一個十字型的徽標(並非紅十字會啊),如下所示: ..$$$$$$$$$$$$$....$...........$..$$$.$$$$$$$$$.$$$$... ...
歷屆試題 列印十字圖 時間限制:1.0s 記憶體限制:256.0MB 問題描述
小明為某機構設計了一個十字型的徽標(並非紅十字會啊),如下所示:
..$$$$$$$$$$$$$....$...........$..
$$$.$$$$$$$$$.$$$
$...$.......$...$
$.$$$.$$$$$.$$$.$
$.$...$...$...$.$
$.$.$$$.$.$$$.$.$
$.$.$...$...$.$.$
$.$.$.$$$$$.$.$.$
$.$.$...$...$.$.$
$.$.$$$.$.$$$.$.$
$.$...$...$...$.$
$.$$$.$$$$$.$$$.$
$...$.......$...$
$$$.$$$$$$$$$.$$$
..$...........$..
..$$$$$$$$$$$$$..
對方同時也需要在電腦dos視窗中以字元的形式輸出該標誌,並能任意控制層數。
輸入格式 一個正整數 n (n<30) 表示要求列印圖形的層數。 輸出格式 對應包圍層數的該標誌。 樣例輸入1 1 樣例輸出1 ..$$$$$....$...$..
$$$.$.$$$
$...$...$
$.$$$$$.$
$...$...$
$$$.$.$$$
..$...$..
..$$$$$.. 樣例輸入2 3 樣例輸出2 ..$$$$$$$$$$$$$..
..$...........$..
$$$.$$$$$$$$$.$$$
$...$.......$...$
$.$$$.$$$$$.$$$.$
$.$...$...$...$.$
$.$.$$$.$.$$$.$.$
$.$.$...$...$.$.$
$.$.$.$$$$$.$.$.$
$.$.$...$...$.$.$
$.$.$$$.$.$$$.$.$
$.$...$...$...$.$
$.$$$.$$$$$.$$$.$
$...$.......$...$
$$$.$$$$$$$$$.$$$
..$...........$..
..$$$$$$$$$$$$$.. 提示 請仔細觀察樣例,尤其要註意句點的數量和輸出位置。 解題思路:這題真的是不需要思路,純粹就是找規律,我的解題技巧是只找其中四分之一的規律,因為上下左右是相互對稱的。
#include<iostream> #include<cmath> #include<string> #include<cstring> #include<cstdio> #include<set> using namespace std; int main(){ int n; cin>>n; int m=3+2*n; char a[6+4*n][6+4*n]; for(int i=1;i<=6+4*n;i++){ memset(a[i],'.',sizeof(a[i])); } for(int i=1;i<=m;i++){ for(int j=1;j<=m;j++){ if(i<=3&&j==1||i==1&&j<=3)a[i][j]='$'; if(j<=i-2&&i%2)a[i][j]='$'; if(i<=j-2&&j%2)a[i][j]='$'; if(j==i-2&&i%2){a[i-1][j]='$';a[i-2][j]='$';} if(i==j-2&&j%2)a[i][j-1]='$'; } } for(int i=m;i>=1;i--){ for(int j=m;j>1;j--){ cout<<a[i][j]; } for(int j=1;j<=m;j++){ cout<<a[i][j]; } cout<<endl; } for(int i=2;i<=m;i++){ for(int j=m;j>1;j--){ cout<<a[i][j]; } for(int j=1;j<=m;j++){ cout<<a[i][j]; } cout<<endl; } }