5 条题解

题解与来源题共享。已有题解默认通过;新增或编辑后需由来源域管理员审核。待审核、驳回题解仅作者和审核管理员可见。来源域:system

  • 1
    @ 2026-9-26 15:01:48

    这题一共两个写法:

    1.forfor循环

        #include<bits/stdc++.h>
    using namespace std;
    int main(){
    	//freopen(".in","r",stdin);
    	//freopen(".out","w",stdout);
    	int n;
    	cin>>n;
    	for(int i=1;i<=n;i++){
    		for(int j=i;j<=n;j++){
    			for(int k=j;k<=n;k++){
    				cout<<i<<" "<<j<<" "<<k<<"\n";
    			}
    		}
    	}
    	return 0;
    }
    
    
    复制的人就走运了复制的人就走运了 运行一下就知道了运行一下就知道了

    正片开始:

    1.STL大法

    用c++库里的一个very牛X的函数:next__permutation 给代码:

    #include<bits/stdc++.h>
    using namespace std;
    int main(){
    	//freopen(".in","r",stdin);
    	//freopen(".out","w",stdout);
    	int n;
    	cin>>n;
    	vector<int> a(n);
    	for(int i=0;i<n;i++){
    		a[i]=i+1;
    	}
    	do{
    		【自己填吧,看懂了再写】
    	}while(next_permutation(a.begin(),a.end()));
    	return 0;
    }
    
    

    重点登场:

    第二种:dfs+回溯 第二种:dfs+回溯 c++代码:

    #include<bits/stdc++.h>
    using namespace std;
    int a[13],n;
    int vis[15];
    void dfs(int u){
    	if(u==n){
    		for(int i=0;i<n;i++){
    			cout<<a[i]<<" ";
    		}
    		cout<<"\n";
    		return;
    	}//边界
    	for(int i=1;i<=n;i++){
    		if(vis[i]==false){
    			a[u]=i;
    			vis[i]=true;
    			dfs(u+1);
    			vis[i]=false;
    			a[u]=0;
    		}
    	}
    }
    void solve(){
    	cin>>n;
    	dfs(0);
    }
    int main(){
    	//freopen(".in","r",stdin);
    	//freopen(".out","w",stdout);
    	solve();
    	return 0;
    }
    
    

    信息

    ID
    64
    时间
    1000ms
    内存
    256MiB
    难度
    入门
    标签
    递交数
    388
    已通过
    213
    上传者