洛谷P1498南蛮图腾(找规律,输出图形题技巧)

 题目链接: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 }

 

posted @ 2018-11-08 20:30  RedBlack  阅读(462)  评论(0编辑  收藏  举报