P1498 南蛮图腾。当编程与数学结合,用C++绘制分型

南蛮图腾

题目背景

自从到了南蛮之地,孔明不仅把孟获收拾的服服帖帖,而且还发现了不少少数民族的智慧,他发现少数民族的图腾往往有着一种分形的效果,在得到了酋长的传授后,孔明掌握了不少绘图技术,但唯独不会画他们的图腾,于是他找上了你的爷爷的爷爷的爷爷的爷爷……帮忙,作为一个好孙子的孙子的孙子的孙子……你能做到吗?

题目描述

给定一个正整数 n n n,参考输出样例,输出图形。

输入格式

每个数据输入一个正整数 n n n,表示图腾的大小(此大小非彼大小)

输出格式

这个大小的图腾

样例 #1

样例输入 #1

2

样例输出 #1

   /\
  /__\
 /\  /\
/__\/__\

样例 #2

样例输入 #2

3

样例输出 #2

       /\
      /__\
     /\  /\
    /__\/__\
   /\      /\
  /__\    /__\
 /\  /\  /\  /\
/__\/__\/__\/__\

提示

数据保证, 1 ≤ n ≤ 10 1 \leq n \leq 10 1n10

去年,搞竞赛的同学给我看了这题,觉得挺有意思的,但是根本不知道分治是啥,所以作罢。不久前在写组合数问题P2822时,尽管我用了题解里的递推公式,但还是WA。于是我想把杨辉三角对2取模输出看下结果,这是12行内的结果:

            1
           1 1 
          1 0 1 
         1 1 1 1 
        1 0 0 0 1 
       1 1 0 0 1 1 
      1 0 1 0 1 0 1 
     1 1 1 1 1 1 1 1 
    1 0 0 0 0 0 0 0 1 
   1 1 0 0 0 0 0 0 1 1 
  1 0 1 0 0 0 0 0 1 0 1
 1 1 1 1 0 0 0 0 1 1 1 1

发现0的分布很有规律,突发奇想能否用这个规律来解这题。

优化了一下递推公式

a[i][j]=a[i-1][j]^a[i-1][j-1];

异或和(a+b)%2有相同的效果,后来发现甚至可以直接用一维数组实现,那就不客气了(滑稽)。

思路如下:行数是2的n次方,以这个数组为基础,奇数行遇1输出"/",偶数行遇连续两个1输出"/__",遇0补上相应的空格即可。

以下是代码:

#include<iostream>
using namespace std;
int n,a[1030]={1};
int main(){
	cin>>n;
    for(int i=0;i<1<<n;++i){
        for(int j=1;j<(1<<n)-i;++j)cout<<" ";//前导空格
		for(int j=i;j>=0;--j)a[j]^=a[j-1];//修改数组
		if(!(i%2))for(int j=0;j<=i;++j)cout<<(a[j]?"/\\":"  ");//奇数行
		else for(int j=0;j<=i;j+=2)cout<<(a[j]?"/__\\":"    ");//偶数行
		cout<<endl;
    }
    return 0;
}

分形就是自相似,那么最终图腾是由多个与之相似的更小的图腾元素组成。

那么最小的元素是什么?

 /\  
/__\        //观察发现,此为基础组成图形,也是n=1时的图腾

将这个图形向右复制一个:

 /\  /\
/__\/__\           

再向上复制一个

   /\
  /__\
 /\  /\             //我们由n=1时的图腾生成了n=2时的图腾
/__\/__\

就得到了n=2时的图腾

以此类推,因为n-1规模图腾可以生成n规模的图腾,我们可以用分治法解决更大规模的图腾,并把n=1的基础图腾预先输入,这里注意一点,‘\’ 是转义字符,这么赋值——

char c='\\';

我们用字符矩阵存储答案,要多大呢,每复制一轮,矩阵的长与宽都翻2倍,初始n=1时,长为4,宽为2,所以定义一个1024×2048的字符矩阵就够了~~

(打表的佩服你的勇气)

还要注意一点,整个矩阵要预先赋值成空格,否则是NULL,这两个在本地输出显示是一样的,但在洛谷上会判错,到时候就出现“我在本地是对的,为什么洛谷上爆0?”的问题云云。

为了便于复制,我们将图腾先倒置处理,最后倒序输出。

最后效率 24ms

Code:

#include<iostream>
using namespace std;
char a[1024][2048];
int main()
{
	ios::sync_with_stdio(false);//输出速度优化 
	int n,length=4,k=1;//length表示当前图腾的宽,length/2是图腾的高 
	cin>>n;
	for(int i=0;i<1024;i++)
    for(int j=0;j<2048;j++)
	a[i][j]=' ';//先全部置为空格(反正忽略行末空格2333) 
	a[0][0]=a[1][1]='/',a[0][1]=a[0][2]='_',a[0][3]=a[1][2]='\\';//存n=1时的基础图腾(倒着的) 
	while(k<n)//不断复制 
	{
		for(int i=0;i<length/2;i++)
		for(int j=0;j<length;j++)
		a[i+(length/2)][j+(length/2)]=a[i][j+length]=a[i][j];
		length*=2,k++;
	} 
	for(int i=(length/2)-1;i>=0;i--)//倒序输出 
	{	
	    for(int j=0;j<length;j++)
	    cout<<a[i][j]; 
		cout<<endl;
	}
	return 0;
}

以下是输入为7时的结果

                                                                                                                               /\                                                                                                                               
                                                                                                                              /__\                                                                                                                              
                                                                                                                             /\  /\                                                                                                                             
                                                                                                                            /__\/__\                                                                                                                            
                                                                                                                           /\      /\                                                                                                                           
                                                                                                                          /__\    /__\                                                                                                                          
                                                                                                                         /\  /\  /\  /\                                                                                                                         
                                                                                                                        /__\/__\/__\/__\                                                                                                                        
                                                                                                                       /\              /\                                                                                                                       
                                                                                                                      /__\            /__\                                                                                                                      
                                                                                                                     /\  /\          /\  /\                                                                                                                     
                                                                                                                    /__\/__\        /__\/__\                                                                                                                    
                                                                                                                   /\      /\      /\      /\                                                                                                                   
                                                                                                                  /__\    /__\    /__\    /__\                                                                                                                  
                                                                                                                 /\  /\  /\  /\  /\  /\  /\  /\                                                                                                                 
                                                                                                                /__\/__\/__\/__\/__\/__\/__\/__\                                                                                                                
                                                                                                               /\                              /\                                                                                                               
                                                                                                              /__\                            /__\                                                                                                              
                                                                                                             /\  /\                          /\  /\                                                                                                             
                                                                                                            /__\/__\                        /__\/__\                                                                                                            
                                                                                                           /\      /\                      /\      /\                                                                                                           
                                                                                                          /__\    /__\                    /__\    /__\                                                                                                          
                                                                                                         /\  /\  /\  /\                  /\  /\  /\  /\                                                                                                         
                                                                                                        /__\/__\/__\/__\                /__\/__\/__\/__\                                                                                                        
                                                                                                       /\              /\              /\              /\                                                                                                       
                                                                                                      /__\            /__\            /__\            /__\                                                                                                      
                                                                                                     /\  /\          /\  /\          /\  /\          /\  /\                                                                                                     
                                                                                                    /__\/__\        /__\/__\        /__\/__\        /__\/__\                                                                                                    
                                                                                                   /\      /\      /\      /\      /\      /\      /\      /\                                                                                                   
                                                                                                  /__\    /__\    /__\    /__\    /__\    /__\    /__\    /__\                                                                                                  
                                                                                                 /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\                                                                                                 
                                                                                                /__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\                                                                                                
                                                                                               /\                                                              /\                                                                                               
                                                                                              /__\                                                            /__\                                                                                              
                                                                                             /\  /\                                                          /\  /\                                                                                             
                                                                                            /__\/__\                                                        /__\/__\                                                                                            
                                                                                           /\      /\                                                      /\      /\                                                                                           
                                                                                          /__\    /__\                                                    /__\    /__\                                                                                          
                                                                                         /\  /\  /\  /\                                                  /\  /\  /\  /\                                                                                         
                                                                                        /__\/__\/__\/__\                                                /__\/__\/__\/__\                                                                                        
                                                                                       /\              /\                                              /\              /\                                                                                       
                                                                                      /__\            /__\                                            /__\            /__\                                                                                      
                                                                                     /\  /\          /\  /\                                          /\  /\          /\  /\                                                                                     
                                                                                    /__\/__\        /__\/__\                                        /__\/__\        /__\/__\                                                                                    
                                                                                   /\      /\      /\      /\                                      /\      /\      /\      /\                                                                                   
                                                                                  /__\    /__\    /__\    /__\                                    /__\    /__\    /__\    /__\                                                                                  
                                                                                 /\  /\  /\  /\  /\  /\  /\  /\                                  /\  /\  /\  /\  /\  /\  /\  /\                                                                                 
                                                                                /__\/__\/__\/__\/__\/__\/__\/__\                                /__\/__\/__\/__\/__\/__\/__\/__\                                                                                
                                                                               /\                              /\                              /\                              /\                                                                               
                                                                              /__\                            /__\                            /__\                            /__\                                                                              
                                                                             /\  /\                          /\  /\                          /\  /\                          /\  /\                                                                             
                                                                            /__\/__\                        /__\/__\                        /__\/__\                        /__\/__\                                                                            
                                                                           /\      /\                      /\      /\                      /\      /\                      /\      /\                                                                           
                                                                          /__\    /__\                    /__\    /__\                    /__\    /__\                    /__\    /__\                                                                          
                                                                         /\  /\  /\  /\                  /\  /\  /\  /\                  /\  /\  /\  /\                  /\  /\  /\  /\                                                                         
                                                                        /__\/__\/__\/__\                /__\/__\/__\/__\                /__\/__\/__\/__\                /__\/__\/__\/__\                                                                        
                                                                       /\              /\              /\              /\              /\              /\              /\              /\                                                                       
                                                                      /__\            /__\            /__\            /__\            /__\            /__\            /__\            /__\                                                                      
                                                                     /\  /\          /\  /\          /\  /\          /\  /\          /\  /\          /\  /\          /\  /\          /\  /\                                                                     
                                                                    /__\/__\        /__\/__\        /__\/__\        /__\/__\        /__\/__\        /__\/__\        /__\/__\        /__\/__\                                                                    
                                                                   /\      /\      /\      /\      /\      /\      /\      /\      /\      /\      /\      /\      /\      /\      /\      /\                                                                   
                                                                  /__\    /__\    /__\    /__\    /__\    /__\    /__\    /__\    /__\    /__\    /__\    /__\    /__\    /__\    /__\    /__\                                                                  
                                                                 /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\                                                                 
                                                                /__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\                                                                
                                                               /\                                                                                                                              /\                                                               
                                                              /__\                                                                                                                            /__\                                                              
                                                             /\  /\                                                                                                                          /\  /\                                                             
                                                            /__\/__\                                                                                                                        /__\/__\                                                            
                                                           /\      /\                                                                                                                      /\      /\                                                           
                                                          /__\    /__\                                                                                                                    /__\    /__\                                                          
                                                         /\  /\  /\  /\                                                                                                                  /\  /\  /\  /\                                                         
                                                        /__\/__\/__\/__\                                                                                                                /__\/__\/__\/__\                                                        
                                                       /\              /\                                                                                                              /\              /\                                                       
                                                      /__\            /__\                                                                                                            /__\            /__\                                                      
                                                     /\  /\          /\  /\                                                                                                          /\  /\          /\  /\                                                     
                                                    /__\/__\        /__\/__\                                                                                                        /__\/__\        /__\/__\                                                    
                                                   /\      /\      /\      /\                                                                                                      /\      /\      /\      /\                                                   
                                                  /__\    /__\    /__\    /__\                                                                                                    /__\    /__\    /__\    /__\                                                  
                                                 /\  /\  /\  /\  /\  /\  /\  /\                                                                                                  /\  /\  /\  /\  /\  /\  /\  /\                                                 
                                                /__\/__\/__\/__\/__\/__\/__\/__\                                                                                                /__\/__\/__\/__\/__\/__\/__\/__\                                                
                                               /\                              /\                                                                                              /\                              /\                                               
                                              /__\                            /__\                                                                                            /__\                            /__\                                              
                                             /\  /\                          /\  /\                                                                                          /\  /\                          /\  /\                                             
                                            /__\/__\                        /__\/__\                                                                                        /__\/__\                        /__\/__\                                            
                                           /\      /\                      /\      /\                                                                                      /\      /\                      /\      /\                                           
                                          /__\    /__\                    /__\    /__\                                                                                    /__\    /__\                    /__\    /__\                                          
                                         /\  /\  /\  /\                  /\  /\  /\  /\                                                                                  /\  /\  /\  /\                  /\  /\  /\  /\                                         
                                        /__\/__\/__\/__\                /__\/__\/__\/__\                                                                                /__\/__\/__\/__\                /__\/__\/__\/__\                                        
                                       /\              /\              /\              /\                                                                              /\              /\              /\              /\                                       
                                      /__\            /__\            /__\            /__\                                                                            /__\            /__\            /__\            /__\                                      
                                     /\  /\          /\  /\          /\  /\          /\  /\                                                                          /\  /\          /\  /\          /\  /\          /\  /\                                     
                                    /__\/__\        /__\/__\        /__\/__\        /__\/__\                                                                        /__\/__\        /__\/__\        /__\/__\        /__\/__\                                    
                                   /\      /\      /\      /\      /\      /\      /\      /\                                                                      /\      /\      /\      /\      /\      /\      /\      /\                                   
                                  /__\    /__\    /__\    /__\    /__\    /__\    /__\    /__\                                                                    /__\    /__\    /__\    /__\    /__\    /__\    /__\    /__\                                  
                                 /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\                                                                  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\                                 
                                /__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\                                                                /__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\                                
                               /\                                                              /\                                                              /\                                                              /\                               
                              /__\                                                            /__\                                                            /__\                                                            /__\                              
                             /\  /\                                                          /\  /\                                                          /\  /\                                                          /\  /\                             
                            /__\/__\                                                        /__\/__\                                                        /__\/__\                                                        /__\/__\                            
                           /\      /\                                                      /\      /\                                                      /\      /\                                                      /\      /\                           
                          /__\    /__\                                                    /__\    /__\                                                    /__\    /__\                                                    /__\    /__\                          
                         /\  /\  /\  /\                                                  /\  /\  /\  /\                                                  /\  /\  /\  /\                                                  /\  /\  /\  /\                         
                        /__\/__\/__\/__\                                                /__\/__\/__\/__\                                                /__\/__\/__\/__\                                                /__\/__\/__\/__\                        
                       /\              /\                                              /\              /\                                              /\              /\                                              /\              /\                       
                      /__\            /__\                                            /__\            /__\                                            /__\            /__\                                            /__\            /__\                      
                     /\  /\          /\  /\                                          /\  /\          /\  /\                                          /\  /\          /\  /\                                          /\  /\          /\  /\                     
                    /__\/__\        /__\/__\                                        /__\/__\        /__\/__\                                        /__\/__\        /__\/__\                                        /__\/__\        /__\/__\                    
                   /\      /\      /\      /\                                      /\      /\      /\      /\                                      /\      /\      /\      /\                                      /\      /\      /\      /\                   
                  /__\    /__\    /__\    /__\                                    /__\    /__\    /__\    /__\                                    /__\    /__\    /__\    /__\                                    /__\    /__\    /__\    /__\                  
                 /\  /\  /\  /\  /\  /\  /\  /\                                  /\  /\  /\  /\  /\  /\  /\  /\                                  /\  /\  /\  /\  /\  /\  /\  /\                                  /\  /\  /\  /\  /\  /\  /\  /\                 
                /__\/__\/__\/__\/__\/__\/__\/__\                                /__\/__\/__\/__\/__\/__\/__\/__\                                /__\/__\/__\/__\/__\/__\/__\/__\                                /__\/__\/__\/__\/__\/__\/__\/__\                
               /\                              /\                              /\                              /\                              /\                              /\                              /\                              /\               
              /__\                            /__\                            /__\                            /__\                            /__\                            /__\                            /__\                            /__\              
             /\  /\                          /\  /\                          /\  /\                          /\  /\                          /\  /\                          /\  /\                          /\  /\                          /\  /\             
            /__\/__\                        /__\/__\                        /__\/__\                        /__\/__\                        /__\/__\                        /__\/__\                        /__\/__\                        /__\/__\            
           /\      /\                      /\      /\                      /\      /\                      /\      /\                      /\      /\                      /\      /\                      /\      /\                      /\      /\           
          /__\    /__\                    /__\    /__\                    /__\    /__\                    /__\    /__\                    /__\    /__\                    /__\    /__\                    /__\    /__\                    /__\    /__\          
         /\  /\  /\  /\                  /\  /\  /\  /\                  /\  /\  /\  /\                  /\  /\  /\  /\                  /\  /\  /\  /\                  /\  /\  /\  /\                  /\  /\  /\  /\                  /\  /\  /\  /\         
        /__\/__\/__\/__\                /__\/__\/__\/__\                /__\/__\/__\/__\                /__\/__\/__\/__\                /__\/__\/__\/__\                /__\/__\/__\/__\                /__\/__\/__\/__\                /__\/__\/__\/__\        
       /\              /\              /\              /\              /\              /\              /\              /\              /\              /\              /\              /\              /\              /\              /\              /\       
      /__\            /__\            /__\            /__\            /__\            /__\            /__\            /__\            /__\            /__\            /__\            /__\            /__\            /__\            /__\            /__\      
     /\  /\          /\  /\          /\  /\          /\  /\          /\  /\          /\  /\          /\  /\          /\  /\          /\  /\          /\  /\          /\  /\          /\  /\          /\  /\          /\  /\          /\  /\          /\  /\     
    /__\/__\        /__\/__\        /__\/__\        /__\/__\        /__\/__\        /__\/__\        /__\/__\        /__\/__\        /__\/__\        /__\/__\        /__\/__\        /__\/__\        /__\/__\        /__\/__\        /__\/__\        /__\/__\    
   /\      /\      /\      /\      /\      /\      /\      /\      /\      /\      /\      /\      /\      /\      /\      /\      /\      /\      /\      /\      /\      /\      /\      /\      /\      /\      /\      /\      /\      /\      /\      /\   
  /__\    /__\    /__\    /__\    /__\    /__\    /__\    /__\    /__\    /__\    /__\    /__\    /__\    /__\    /__\    /__\    /__\    /__\    /__\    /__\    /__\    /__\    /__\    /__\    /__\    /__\    /__\    /__\    /__\    /__\    /__\    /__\  
 /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\ 
/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\

快来试试吧

  • 61
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 11
    评论
控制台三国杀的说明 这个程序耗费了我三四个星期的时间与精力,不过做的很粗糙,没有实现三国杀的全部功能。 现在这个版本,实现的功能是两个武将一对一,玩家开始时控制A武将,由电脑接管B武将来响应A的出牌;A武将回合 结束后,玩家控制B武将,由电脑接管A武将响应B武将出牌。(不要喷我哦~现在没实现AI控制主动出牌~)如此循环往复,直 到一名武将阵亡,游戏宣告结束。 这个程序使用三国杀标准包,一共104张牌。实现了杀、闪、桃、乐不思蜀、闪电、无中生有、南蛮入侵、万箭齐发 、桃园结义、过河拆桥、顺手牵羊、决斗、五谷丰登(不能自由选牌)、标准回合顺序;没实现借刀杀人、无懈可击、装备( 装备牌可以装上,但是没有功能)、距离、武将技能。没实现的原因是建立框架时没有考虑完全,以致这些功能无法加入其中 。 在游戏中,A武将为“刘备”,座位号0;B武将为“张飞”,座位号1。运行游戏时在命令行显示“>>”时输入“z” 然后回车即可开始游戏(输入h可查看用于调试模式的命令)。 本程序共1417行代码,使用C++语言于VS2010平台编写。我会继续完善它直到实现它所有的功能,现在临近期末考试 ,没有时间继续完善它了,结构说明书也没有写。我的QQ:744676345(羽枫),有问题可以加我询问。
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一只贴代码君

帅帅的你,留下你的支持吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值