当前位置:网站首页>C - minute number V3

C - minute number V3

2022-07-07 23:39:00 Yuesi

recursive

C - Minute number V3


# subject

take n Divide into m More than 0 The sum of different numbers of ,1 2 Same as 2 1 Treat as the same division .

Output all schemes in dictionary order . Data guarantee existence solution , That is, there will be no 1+2+…m > n The situation of
## Input
2 Number n,m(1 <= m <= 10,1 <= n <= 50 ).
(1+2+…m > n)
## Output
In dictionary order , Output all schemes . Between the numbers , Divide... With spaces .
## The sample input :
13 3
## Sample output :
1 2 10
1 3 9
1 4 8
1 5 7
2 3 8
2 4 7
2 5 6
3 4 6

#include<bits/stdc++.h>
using namespace std;
int m,n;
int num[100]={
    0};
void dfs(int u,int x)
{
     
	if(u>m+1||x<0)
	// Not in line with the question 
	// It's ready m I didn't get the sum of my share n and m Not enough and more than n 
	{
    
		return;// Go back to the previous step  
	}
	if(u==m+1&&x==0)
	// In line with the meaning of the topic , Output arrangement , And return to the previous step  
	{
    
		for(int i=1;i<m;i++)
		{
    
			cout<<num[i]<<" ";
			// Separate with a space  
		}
		cout<<num[m]<<endl;
		return;
	}
	for(int i=num[u-1]+1;i<=x;i++)
	{
    
		num[u]=i;// Save each value  
		dfs(u+1,x-i);
		// Must be written as x-i
		// It can't be written as x( Add in the previous step x=x-i;)  Wrong  
	}
}
int main(){
    
	scanf("%d%d",&n,&m);
	// take n Divide into m Share  
	dfs(1,n);// From the first , The remaining number is n
	return 0;
}

原网站

版权声明
本文为[Yuesi]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/02/202202130556375403.html