栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++ 打印图形综合题解 (递归+分治)【附代码】

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++ 打印图形综合题解 (递归+分治)【附代码】

打印图形这种题主要就是想办法找到一个方法递归打印,下面我们来一起看一看主要的是哪些题目。

1  打印三角形

打印如下图案,

1

*   

2

* *     
*       

3

* * * *         
*   *           
* *             
*               

4

* * * * * * * *                 
*   *   *   *                   
* *     * *                     
*       *                       
* * * *                         
*   *                           
* *                             
*                               

5

* * * * * * * * * * * * * * * *                                 
*   *   *   *   *   *   *   *                                   
* *     * *     * *     * *                                     
*       *       *       *                                       
* * * *         * * * *                                         
*   *           *   *                                           
* *             * *                                             
*               *                                               
* * * * * * * *                                                 
*   *   *   *                                                   
* *     * *                                                     
*       *                                                       
* * * *                                                         
*   *                                                           
* *                                                             
*                                                               

6

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *                                                                 
*   *   *   *   *   *   *   *   *   *   *   *   *   *   *   *                                                                   
* *     * *     * *     * *     * *     * *     * *     * *                                                                     
*       *       *       *       *       *       *       *                                                                       
* * * *         * * * *         * * * *         * * * *                                                                         
*   *           *   *           *   *           *   *                                                                           
* *             * *             * *             * *                                                                             
*               *               *               *                                                                               
* * * * * * * *                 * * * * * * * *                                                                                 
*   *   *   *                   *   *   *   *                                                                                   
* *     * *                     * *     * *                                                                                     
*       *                       *       *                                                                                       
* * * *                         * * * *                                                                                         
*   *                           *   *                                                                                           
* *                             * *                                                                                             
*                               *                                                                                               
* * * * * * * * * * * * * * * *                                                                                                 
*   *   *   *   *   *   *   *                                                                                                   
* *     * *     * *     * *                                                                                                     
*       *       *       *                                                                                                       
* * * *         * * * *                                                                                                         
*   *           *   *                                                                                                           
* *             * *                                                                                                             
*               *                                                                                                               
* * * * * * * *                                                                                                                 
*   *   *   *                                                                                                                   
* *     * *                                                                                                                     
*       *                                                                                                                       
* * * *                                                                                                                         
*   *                                                                                                                           
* *                                                                                                                             
*                                                                                                                               


这道题比较简单的方法就是递归打印。

首先可以找一个字符数组记录每个位置的信息,不过最好开个三维的,这样把n为1到10的情况全部记录,比较方便。

然后仔细观察后,不难发现:所有图案均有三个较小图案组成,这样直接将它按顺序放在数组里即可(所以知道开三维数组的好处了吗?)

但是我们还发现打印的里面有空格和空行,那怎么办呢?

虽说你把空格存入数组再打印也不能说是不行,但是:

1. 数组空间大4倍。(因为空格也要存进去)

2. 递归处理起来要麻烦不少。

所以最好先递归,到打印时再处理空格与空行。

所以来看看代码吧:

//NW1405C 22-04-23
#include 
using namespace std;
char a[11][1050][1050];
int ro,co;

void make(int n)//r,c为开始打印的位置
{
	int p=pow(2,n-1),q=pow(2,n-2);
	for (int i=1;i<=p;i++)
		for (int j=1;j<=q;j++)
			a[n][i][j]=a[n-1][i][j];
	for (int i=1;i<=p;i++)
		for (int j=1;j<=q;j++)
			a[n][i+p][j]=a[n-1][i][j];
	for (int i=1;i<=p;i++)
		for (int j=1;j<=q;j++)
			a[n][i][j+q]=a[n-1][i][j];	
	return;
}

int main() 
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	int n;
	for (int i=1;i<=10;i++)
		for (int j=1;j<=1024;j++)
			for (int k=1;k<=1024;k++)
				a[i][j][k]=' ';
	a[1][1][1]='*';
	for (int i=2;i<=10;i++)
	{
		make(i);
	}
	while (cin>>n)
	{
		
		for (int i=1;i<=pow(2,n);i+=2)
		{
			for (int j=1;j<=pow(2,n);j++)
				cout<

(写的不好或者太麻烦,欢迎评论)

运行截图:

2  打印三角形2 (打印边)

1

 / 
/__

2

   /   
  /__  
 /  / 
/__/__

3

       /       
      /__      
     /  /     
    /__/__    
   /      /   
  /__    /__  
 /  /  /  / 
/__/__/__/__

4

               /               
              /__              
             /  /             
            /__/__            
           /      /           
          /__    /__          
         /  /  /  /         
        /__/__/__/__        
       /              /       
      /__            /__      
     /  /          /  /     
    /__/__        /__/__    
   /      /      /      /   
  /__    /__    /__    /__  
 /  /  /  /  /  /  /  / 
/__/__/__/__/__/__/__/__

5

                               /                               
                              /__                              
                             /  /                             
                            /__/__                            
                           /      /                           
                          /__    /__                          
                         /  /  /  /                         
                        /__/__/__/__                        
                       /              /                       
                      /__            /__                      
                     /  /          /  /                     
                    /__/__        /__/__                    
                   /      /      /      /                   
                  /__    /__    /__    /__                  
                 /  /  /  /  /  /  /  /                 
                /__/__/__/__/__/__/__/__                
               /                              /               
              /__                            /__              
             /  /                          /  /             
            /__/__                        /__/__            
           /      /                      /      /           
          /__    /__                    /__    /__          
         /  /  /  /                  /  /  /  /         
        /__/__/__/__                /__/__/__/__        
       /              /              /              /       
      /__            /__            /__            /__      
     /  /          /  /          /  /          /  /     
    /__/__        /__/__        /__/__        /__/__    
   /      /      /      /      /      /      /      /   
  /__    /__    /__    /__    /__    /__    /__    /__  
 /  /  /  /  /  /  /  /  /  /  /  /  /  /  /  / 
/__/__/__/__/__/__/__/__/__/__/__/__/__/__/__/__

6

                                                               /                                                               
                                                              /__                                                              
                                                             /  /                                                             
                                                            /__/__                                                            
                                                           /      /                                                           
                                                          /__    /__                                                          
                                                         /  /  /  /                                                         
                                                        /__/__/__/__                                                        
                                                       /              /                                                       
                                                      /__            /__                                                      
                                                     /  /          /  /                                                     
                                                    /__/__        /__/__                                                    
                                                   /      /      /      /                                                   
                                                  /__    /__    /__    /__                                                  
                                                 /  /  /  /  /  /  /  /                                                 
                                                /__/__/__/__/__/__/__/__                                                
                                               /                              /                                               
                                              /__                            /__                                              
                                             /  /                          /  /                                             
                                            /__/__                        /__/__                                            
                                           /      /                      /      /                                           
                                          /__    /__                    /__    /__                                          
                                         /  /  /  /                  /  /  /  /                                         
                                        /__/__/__/__                /__/__/__/__                                        
                                       /              /              /              /                                       
                                      /__            /__            /__            /__                                      
                                     /  /          /  /          /  /          /  /                                     
                                    /__/__        /__/__        /__/__        /__/__                                    
                                   /      /      /      /      /      /      /      /                                   
                                  /__    /__    /__    /__    /__    /__    /__    /__                                  
                                 /  /  /  /  /  /  /  /  /  /  /  /  /  /  /  /                                 
                                /__/__/__/__/__/__/__/__/__/__/__/__/__/__/__/__                                
                               /                                                              /                               
                              /__                                                            /__                              
                             /  /                                                          /  /                             
                            /__/__                                                        /__/__                            
                           /      /                                                      /      /                           
                          /__    /__                                                    /__    /__                          
                         /  /  /  /                                                  /  /  /  /                         
                        /__/__/__/__                                                /__/__/__/__                        
                       /              /                                              /              /                       
                      /__            /__                                            /__            /__                      
                     /  /          /  /                                          /  /          /  /                     
                    /__/__        /__/__                                        /__/__        /__/__                    
                   /      /      /      /                                      /      /      /      /                   
                  /__    /__    /__    /__                                    /__    /__    /__    /__                  
                 /  /  /  /  /  /  /  /                                  /  /  /  /  /  /  /  /                 
                /__/__/__/__/__/__/__/__                                /__/__/__/__/__/__/__/__                
               /                              /                              /                              /               
              /__                            /__                            /__                            /__              
             /  /                          /  /                          /  /                          /  /             
            /__/__                        /__/__                        /__/__                        /__/__            
           /      /                      /      /                      /      /                      /      /           
          /__    /__                    /__    /__                    /__    /__                    /__    /__          
         /  /  /  /                  /  /  /  /                  /  /  /  /                  /  /  /  /         
        /__/__/__/__                /__/__/__/__                /__/__/__/__                /__/__/__/__        
       /              /              /              /              /              /              /              /       
      /__            /__            /__            /__            /__            /__            /__            /__      
     /  /          /  /          /  /          /  /          /  /          /  /          /  /          /  /     
    /__/__        /__/__        /__/__        /__/__        /__/__        /__/__        /__/__        /__/__    
   /      /      /      /      /      /      /      /      /      /      /      /      /      /      /      /   
  /__    /__    /__    /__    /__    /__    /__    /__    /__    /__    /__    /__    /__    /__    /__    /__  
 /  /  /  /  /  /  /  /  /  /  /  /  /  /  /  /  /  /  /  /  /  /  /  /  /  /  /  /  /  /  /  / 
/__/__/__/__/__/__/__/__/__/__/__/__/__/__/__/__/__/__/__/__/__/__/__/__/__/__/__/__/__/__/__/__

 这道题与上面的差不多,只不过要打印边,但总体还是递归。

不过这道题要注意几个地方:

1. 此题要设置初始值,也就是:

   /

 /__

2. 这道题赋初值时,不能写成 ='' ,这样会被误识别,一定要写成:=92;

( 的ASCII为92)

代码时间:

#include 
using namespace std;
char a[11][3001][3001];
int ro,co;
  
void make(int n)//r,c为开始打印的位置
{
    int p=pow(2,n-1),q=pow(2,n-2),r=pow(2,n);
    for (int i=1;i<=p;i++)
        for (int j=1;j<=r;j++)
            a[n][i][j+p]=a[n-1][i][j];
    for (int i=1;i<=p;i++)
        for (int j=1;j<=r;j++)
            a[n][i+p][j]=a[n-1][i][j];
    for (int i=1;i<=p;i++)
        for (int j=1;j<=r;j++)
            a[n][i+p][j+r]=a[n-1][i][j]; 
      
    return;
}
  
int main() 
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    int n;
    for (int i=1;i<=10;i++)
        for (int j=1;j<=2500;j++)
            for (int k=1;k<=2500;k++)
                a[i][j][k]=' ';
    a[1][1][2]='/';a[1][1][3]=92;
    a[1][2][1]='/';a[1][2][2]='_';a[1][2][3]='_';a[1][2][4]=92;
    for (int i=2;i<=10;i++)
    {
        make(i);
    }
    while (cin>>n)
    {
        for (int i=1;i<=pow(2,n);i++)
        {
            for (int j=1;j<=pow(2,n+1);j++)
                cout<

3  打印 O

1

 O 
OOO
 O 

2

    O    
   OOO   
    O    
 O  O  O 
OOOOOOOOO
 O  O  O 
    O    
   OOO   
    O  
  
3

             O             
            OOO            
             O             
          O  O  O          
         OOOOOOOOO         
          O  O  O          
             O             
            OOO            
             O             
    O        O        O    
   OOO      OOO      OOO   
    O        O        O    
 O  O  O  O  O  O  O  O  O 
OOOOOOOOOOOOOOOOOOOOOOOOOOO
 O  O  O  O  O  O  O  O  O 
    O        O        O    
   OOO      OOO      OOO   
    O        O        O    
             O             
            OOO            
             O             
          O  O  O          
         OOOOOOOOO         
          O  O  O          
             O             
            OOO            
             O 
            
4

                                        O                                        
                                       OOO                                       
                                        O                                        
                                     O  O  O                                     
                                    OOOOOOOOO                                    
                                     O  O  O                                     
                                        O                                        
                                       OOO                                       
                                        O                                        
                               O        O        O                               
                              OOO      OOO      OOO                              
                               O        O        O                               
                            O  O  O  O  O  O  O  O  O                            
                           OOOOOOOOOOOOOOOOOOOOOOOOOOO                           
                            O  O  O  O  O  O  O  O  O                            
                               O        O        O                               
                              OOO      OOO      OOO                              
                               O        O        O                               
                                        O                                        
                                       OOO                                       
                                        O                                        
                                     O  O  O                                     
                                    OOOOOOOOO                                    
                                     O  O  O                                     
                                        O                                        
                                       OOO                                       
                                        O                                        
             O                          O                          O             
            OOO                        OOO                        OOO            
             O                          O                          O             
          O  O  O                    O  O  O                    O  O  O          
         OOOOOOOOO                  OOOOOOOOO                  OOOOOOOOO         
          O  O  O                    O  O  O                    O  O  O          
             O                          O                          O             
            OOO                        OOO                        OOO            
             O                          O                          O             
    O        O        O        O        O        O        O        O        O    
   OOO      OOO      OOO      OOO      OOO      OOO      OOO      OOO      OOO   
    O        O        O        O        O        O        O        O        O    
 O  O  O  O  O  O  O  O  O  O  O  O  O  O  O  O  O  O  O  O  O  O  O  O  O  O  O 
OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
 O  O  O  O  O  O  O  O  O  O  O  O  O  O  O  O  O  O  O  O  O  O  O  O  O  O  O 
    O        O        O        O        O        O        O        O        O    
   OOO      OOO      OOO      OOO      OOO      OOO      OOO      OOO      OOO   
    O        O        O        O        O        O        O        O        O    
             O                          O                          O             
            OOO                        OOO                        OOO            
             O                          O                          O             
          O  O  O                    O  O  O                    O  O  O          
         OOOOOOOOO                  OOOOOOOOO                  OOOOOOOOO         
          O  O  O                    O  O  O                    O  O  O          
             O                          O                          O             
            OOO                        OOO                        OOO            
             O                          O                          O             
                                        O                                        
                                       OOO                                       
                                        O                                        
                                     O  O  O                                     
                                    OOOOOOOOO                                    
                                     O  O  O                                     
                                        O                                        
                                       OOO                                       
                                        O                                        
                               O        O        O                               
                              OOO      OOO      OOO                              
                               O        O        O                               
                            O  O  O  O  O  O  O  O  O                            
                           OOOOOOOOOOOOOOOOOOOOOOOOOOO                           
                            O  O  O  O  O  O  O  O  O                            
                               O        O        O                               
                              OOO      OOO      OOO                              
                               O        O        O                               
                                        O                                        
                                       OOO                                       
                                        O                                        
                                     O  O  O                                     
                                    OOOOOOOOO                                    
                                     O  O  O                                     
                                        O                                        
                                       OOO                                       
                                        O      
                                  

(这个题就不放5了,太长了)

这个题也是第1题的变种,只不过从递归3个小部分,变成5个部分了。

注意上面的圈是大写O。

直接代码:

#include
using namespace std;
char a[8][2200][2200];
 
void make(int n)
{
    int r,c;//strating point
    c=pow(3,n-1);r=0;
    for (int i=1;i<=pow(3,n-1);i++)
        for (int j=1;j<=pow(3,n-1);j++)
            a[n][r+i][c+j]=a[n-1][i][j];
    c=0;r=pow(3,n-1);
    for (int i=1;i<=pow(3,n-1);i++)
        for (int j=1;j<=pow(3,n-1);j++)
            a[n][r+i][c+j]=a[n-1][i][j];
    c=pow(3,n-1);r=pow(3,n-1);
    for (int i=1;i<=pow(3,n-1);i++)
        for (int j=1;j<=pow(3,n-1);j++)
            a[n][r+i][c+j]=a[n-1][i][j];
    c=pow(3,n-1)*2;r=pow(3,n-1);
    for (int i=1;i<=pow(3,n-1);i++)
        for (int j=1;j<=pow(3,n-1);j++)
            a[n][r+i][c+j]=a[n-1][i][j];
    c=pow(3,n-1);r=pow(3,n-1)*2;
    for (int i=1;i<=pow(3,n-1);i++)
        for (int j=1;j<=pow(3,n-1);j++)
            a[n][r+i][c+j]=a[n-1][i][j];            
}
 
int main()
{
    int n;
    while (cin>>n)
    {
        for (int i=1;i<=7;i++)
            for (int j=1;j<=2200;j++)
                for (int k=1;k<=2200;k++)
                    a[i][j][k]=' ';
        a[1][1][2]='O';
        a[1][2][1]='O';a[1][2][2]='O';a[1][2][3]='O';
        a[1][3][2]='O';
        for (int i=2;i<=7;i++) make(i);
        for (int i=1;i<=pow(3,n);i++)
        {
            for (int j=1;j<=pow(3,n);j++)
                cout<

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/935298.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号