1. 程式人生 > >洛谷P1498南蠻圖騰(找規律,輸出圖形題技巧)

洛谷P1498南蠻圖騰(找規律,輸出圖形題技巧)

 

 

這題還是很有意思的,關鍵有三點:

1.觀察規律力強,能觀察到基礎圖形寬和高的規律。

2.要能倒著儲存基礎圖形(到這就完成一半了)。

3.能根據寬和高不斷複製基礎圖形

 

另外要注意並且能發現到:

這題你只能倒著操作,倒著存倒著輸出。

因為要加寬加高,正著就沒法更新操作!

 1 #include<iostream>
 2 using namespace std;
 3 const int maxn=3005;
 4 char a[maxn][maxn];
 5 int main()
 6 {
 7     ios::sync_with_stdio(false
); cin.tie(0); 8 9 int n; 10 cin>>n; 11 for(int i=0;i<maxn;i++) for(int j=0;j<maxn;j++) a[i][j]=' ';//先全部置為空格,否則空串錯誤還麻煩要if輸出空格 12 13 //1.存基礎圖形(n=1倒著的) 14 a[0][0]='/'; a[0][1]='_'; a[0][2]='_'; a[0][3]='\\'; 15 a[1][1]='/'; a[1][2]='\\'; 16 17 //2.複製右邊和上邊
18 int len=4,k=1;//len表示當前圖騰的寬,len/2是圖騰的高;能觀察但到基礎的規律:寬和高多麼重要! 19 while(k<n)//不斷複製 20 { 21 for(int i=0;i<len/2;i++) 22 { 23 24 for(int j=0;j<len;j++) 25 { 26 a[i][j+len]=a[i][j];//右邊只加寬 27 a[i+len/2][j+len/2
]=a[i][j];//上邊加高加寬 28 } 29 } 30 31 len*=2; 32 k++; 33 } 34 35 //3.輸出 36 for(int i=(len/2)-1;i>=0;i--)//倒序輸出 37 { 38 for(int j=0;j<len;j++) 39 { 40 cout<<a[i][j]; 41 } 42 cout<<endl; 43 } 44 45 return 0; 46 }