#include using namespace std; int a[10];//a数组记录每一份的值 bool vis[201][201][201][201][201][201];//vis数组记录每一种分法是否出现过 void dfs(int n,int k,int sum,int last)//n表示当前要分的数,k表示还需要分的份数 {//sum表示当前已经分的数的和,last表示上一份的值 if(k==1)//只剩下一份,直接输出答案 { a[k]=n;//将剩余的数赋值给最后一份 if(!vis[a[1]][a[2]][a[3]][a[4]][a[5]][a[6]])//如果这种分法之前没有出现过 { for(int i=1;i<=k;i++) cout<<a[i];//输出这种分法 cout<<endl; vis[a[1]][a[2]][a[3]][a[4]][a[5]][a[6]]=true;//将这种分法标记为出现过 } return;//返回上一层 } for(int i=1;i<n;i++)//枚举当前这份的值 { if(last<=i)//如果当前这份的值大于上一份的值 { a[k]=i;//将当前这份的值赋值给a[k] dfs(n-i,k-1,sum+i,i);//递归处理下一份 } } } int main() { int n,k; cin>>n>>k; dfs(n,k,0,0);//从第一份开始分,当前的和为0,上一份的值为0 return 0;

C++ 问题描述输入整数n和k将整数n分成k份且每份不能为空任意两种分法不能相同不考虑顺序请编写程序输出每一种分法。 6n=2001k7。 说明n=7k=3则下面三种分法被认为是相同的。115 151 511输入输出样例1输入7 3输出115 124 133 223请直接给出代码

原文地址: https://www.cveoy.top/t/topic/e2l6 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录