题目链接:https://www.luogu.org/problemnew/show/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 }