洛谷P1498南蠻圖騰(找規律,輸出圖形題技巧)
阿新 • • 發佈:2018-11-08
這題還是很有意思的,關鍵有三點:
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 }