求各位佬帮我看一下我与题解有什么区别,悬棺
查看原帖
求各位佬帮我看一下我与题解有什么区别,悬棺
1238483
ybc2027zhanglingrui楼主2025/2/4 11:12

题解:

#include<iostream>
#include<math.h>
using namespace std;
void PT(int n)//输出n个空格 
{
     for(int i=0;i<n;i++)
         cout<<" ";
}
 
 void F(int n,int L,int flag)//n为度数,L为层数,flag为1代表左边(要填充),flag为0代表右边 
 {
     if(n==1)
         cout<<'X';
     else
    {
         if(L<=pow(3,n-2))
         {    
             if(flag)
                 F(n-1,L,flag);
             else
                 F(n-1,L,!flag);
                 PT(pow(3,n-2));
                 F(n-1,L,flag);
        }
         else if(L<=2*pow(3,n-2))
        {
             PT(pow(3,n-2));
             F(n-1,L%(int)(pow(3,n-2)),flag);
             PT(pow(3,n-2));        
         }
        else
         {
             if(flag)
                 F(n-1,L%(int)(pow(3,n-2)),flag);
             else
                 F(n-1,L%(int)(pow(3,n-2)),!flag);
             PT(pow(3,n-2));
             F(n-1,L%(int)(pow(3,n-2)),flag);
         }
    }
}
 
 void Solve(int n) 
 {
     if(n==1)
    {
         cout<<'X'<<endl;
         return ;
    }
    for(int i=1;i<=pow(3,n-2);i++)
    {
         F(n-1,i,1);
         PT(pow(3,n-2));
         F(n-1,i,0);
         cout<<endl;
     }
     for(int i=1;i<=pow(3,n-2);i++)
     {
         PT(pow(3,n-2));
         F(n-1,i,0);
         PT(pow(3,n-2));
         cout<<endl;
     }
     for(int i=1;i<=pow(3,n-2);i++)
     {
         F(n-1,i,1);
         PT(pow(3,n-2));
         F(n-1,i,0);
         cout<<endl;
     }
}
int main()
{
    int n;
    cin>>n;
    while(n!=-1)
    {
        Solve(n);
        cout<<'-'<<endl;
        cin>>n;
    }
    return 0;
}

我的代码:

#include <bits/stdc++.h>

using namespace std;

#define pr for(int i = 1;i <= pow(3,n - 2);i++) cout << ' ';

void dfs(int n,int l,int flag)
{
	if(n==1) cout << 'X';
	else
	{
		if(l <= pow(3,n - 2))
		{
			if(flag) dfs(n - 1,l,flag);
			else
			{
				dfs(n - 1,l,!flag);
				pr;
				dfs(n - 1,l,flag);
			}
		}
		else if(l <= 2 * pow(3,n - 2))
		{
			pr;		
			dfs(n - 1,l % (int)(pow(3,n - 2)),flag);
			pr;
		}
		else
		{
			if(flag) dfs(n - 1,l % (int)(pow(3,n - 2)),flag);
			else dfs(n - 1,l % (int)(pow(3,n - 2)),!flag);
			pr;
			dfs(n - 1,l % (int)(pow(3,n - 2)),flag);
		}
	}
}

int main()
{
	int n;
	while(cin>>n)
	{
		if(n==1) cout << 'X' << endl;
		else
		{
			for(int i = 1;i <= pow(3,n - 2);i++)
			{
				dfs(n - 1,i,1);
				pr;
				dfs(n - 1,i,0);
				puts("");
			}
			for(int i = 1;i <= pow(3,n - 2);i++)
			{
				pr;
				dfs(n - 1,i,0);
				pr;
				puts("");
			}	
			for(int i = 1;i <= pow(3,n - 2);i++)
			{
				dfs(n - 1,i,1);
				pr;
				dfs(n - 1,i,0);
				puts("");
			}
		}
		cout << "-\n";
	}
}
	```
2025/2/4 11:12
加载中...