6 条题解

  • 1
    @ 2026-1-17 15:57:38

    包AC

    #include<bits/stdc++.h>//递归汉诺塔 
    using namespace std; 
    int a[10000],n,total=0;
    void pr(int d){
    	total+=1;
    	cout<<n<<"=";
    	for(int i=1;i<=d-1;i++){
    		cout<<a[i]<<"+";
    	}
    	cout<<a[d];
    	cout<<endl;
    } 
    void step(int dep,int rest){
    	if(rest==0){
    		if(dep>2){
    			pr(dep-1);
    			return;
    		}
    	}
    for(int i=a[dep-1];i<=rest;i++){
    	a[dep]=i;
    	step(dep+1,rest-i);
    
    }
    }
    int main(){
    	
    	cin>>n;
    	a[0]=1;
    	step(1,n);
    	cout<<"total="<<total;
    }
    
  • 1
    @ 2025-12-7 20:22:18

    一直改一直改,终于写出来了!!!

    亲测AC,放心食用
    #include <bits/stdc++.h>
    using namespace std;
    const int N=1e5+10;
    int n,ans=0,x[N];
    void f(int num,int sum,int last){
    	if(sum==n){
    		ans++;
    		cout<<n<<"=";
    		for(int i=1;i<num;i++){
    			cout<<x[i];
    			if(i==num-1){
    				cout<<endl;
    				break;
    			}
    			cout<<"+";
    		}
    		return ; 
    	}
    	if(sum+last>n){
    		return ;
    	}
    	for(int i=last;i<=n-sum;i++){
    		if(i==n){
    			return ;
    		}
    		x[num]=i;
    		f(num+1,sum+i,i);
    	}
    }
    int main(){
    	cin>>n;
    	f(1,0,1);
    	cout<<"total="<<ans;
    	return 0;
    }
    

    留下你的赞吧

    • 0
      @ 2026-1-17 15:59:00

      包AC #include<bits/stdc++.h> using namespace std; int a[10000],n,total=0; void pr(int d){ total+=1; cout<<n<<"="; for(int i=1;i<=d-1;i++){ cout<<a[i]<<"+"; } cout<<a[d]; cout<<endl; } void step(int dep,int rest){ if(rest==0){ if(dep>2){ pr(dep-1); return; } } for(int i=a[dep-1];i<=rest;i++){ a[dep]=i; step(dep+1,rest-i);

      } } int main(){

      cin>>n;
      a[0]=1;
      step(1,n);
      cout<<"total="<<total;
      

      }

      • 0
        @ 2025-5-20 16:50:48
        #include <bits/stdc++.h> 
        using namespace std;
        int n , ans , a[114514] ;
        void f(int n , int last , int step , int k )
        {
        	if ( last > n && n != 0 ) return;
        	if( n == 0 && step > 1 )
        	{
        		ans++;
        		cout << k << "=" ;
        		for( int i = 0 ; i < step - 1 ; i++ )
        		{
        			cout << a[ i ] << "+" ;
        		}	
        		cout << a[ step - 1 ] << endl ;
        		return;
        	}
        	for ( int i = last ; i <= n ; i++)
        	{
        		a[ step ] = i ;
        		f ( n - i , i , step + 1 , k );
        	}
        }
        int main()
        {
        	cin >> n ;
        	f( n , 1 , 0 , n);
        	cout << "total=" << ans << endl ;
        	return 0;
        }
        
        
        
        • -2
          @ 2023-6-5 17:40:35
          #include <queue>
          #include <math.h>
          #include <stack>
          #include <vector>
          #include <stdio.h>
          #include <iostream>
          #include <vector>
          #include <iomanip>
          #include <string.h>
          #include<cstring>
          #include <algorithm>
          #define LL long long
          const int N = 1e2 + 10;
          const int INF = 0x3f3f3f3f;
          using namespace std;
          int n , ans , a[N] ;
          void f(int n , int last , int step , int k )
          {
          	if ( last > n && n != 0 ) return;
          	if( n == 0 && step > 1 )
          	{
          		ans++;
          		cout << k << "=" ;
          		for( int i = 0 ; i < step - 1 ; i++ )
          		{
          			cout << a[ i ] << "+" ;
          		}	
          		cout << a[ step - 1 ] << endl ;
          		return;
          	}
          	for ( int i = last ; i <= n ; i++)
          	{
          		a[ step ] = i ;
          		f ( n - i , i , step + 1 , k );
          	}
          }
          int main()
          {
          	cin >> n ;
          	f( n , 1 , 0 , n);
          	cout << "total=" << ans << endl ;
          	return 0;
          }
          
          • -2
            @ 2022-1-9 17:42:38
            #include <queue>
            #include <math.h>
            #include <stack>
            #include <stdio.h>
            #include <iostream>
            #include <vector>
            #include <iomanip>
            #include <string.h>
            #include <algorithm>
            using namespace std;
            #define LL long long
            const int N = 1e6 + 10;
            const int INF = 0x3f3f3f3f;
            int ans[N]; 
            int n, total;
            void pr(int d){ 
                total+=1;
                cout<<n<<"=";
                for(int i=1; i<=d-1; i++)cout<<ans[i]<<"+";
                cout<<ans[d]<<endl;
            }
            void dfs(int dep, int rest){
                if(rest==0){
                    if(dep>2){ 
                        pr(dep-1);
                        return;
                    }
                }
                for(int i=ans[dep-1]; i<=rest; i++){
                    ans[dep]=i;
                    dfs(dep+1, rest-i);
                }
            }
            int main()
            {
                cin>>n;
                ans[0]=1;
                dfs(1, n);
                cout<<"total="<<total;
                return 0;
            }
            • 1

            信息

            ID
            1242
            时间
            1000ms
            内存
            256MiB
            难度
            4
            标签
            递交数
            404
            已通过
            178
            上传者