输入两个整数 n 和 m,从数列1,2,3.......n 中随意取几个数,使其和等于 m ,要求将其中所有的可能组合列出来

简介: /*输入两个整数 n 和 m,从数列1,2,3.......n 中随意取几个数,使其和等于 m ,要求将其中所有的可能组合列出来*/#include "stdafx.
/*
输入两个整数 n 和 m,从数列1,2,3.......n 中随意取几个数,使其和等于 m ,要求将其中所有的可能组合列出来
*/

#include "stdafx.h"
#include<iostream>
#include<vector>
using namespace std;

int length;
void PrintSolutions(int *flag)
{
	for (int i = 0; i<length; i++)
	{
		if (flag[i] == 1)
		{
			
			cout << i + 1 << "  ";
		}
	}
	cout << endl;
}

void BagProblem(int m, int n, int *flag)
{
	if (n<1 || m<1)
		return;
	if (m < n)
		n = m;
	if (n == m)
	{
		//将n集合中值为n的元素的flag制为1
		flag[n - 1] = 1;
		PrintSolutions(flag);
		flag[n - 1] = 0;
	}
	//最高位制为1
	//F(sum,n)=F(sum-n,n-1)+F(sum,n-1);
	//n个元素凑sum等价于
	//n-1个元素凑sum-n(这部分说明原先有n参与才凑成sum)
	//和n-1个元素凑sum(这部分说明原先没有n参与也能凑成sum)
	flag[n - 1] = 1;
	BagProblem(m - n, n - 1, flag);
	flag[n - 1] = 0;
	BagProblem(m, n - 1, flag);
}

int main()
{
	int m=0, n=0;
	cout << "Please input the m and n:" << endl;
	cin >> m >> n;
	cout << "The solution is:" << endl;
	length = n;
	//创建大小为n的数组flag
	int *flag = (int *)malloc(sizeof(int)*n);
	memset(flag, 0, sizeof(flag));
	BagProblem(m, n, flag);
	free(flag);
	return 0;
}


相关文章
|
4月前
|
Python
一个大于1的自然数,除了1和它本身外,不能被
一个大于1的自然数,除了1和它本身外,不能被
|
12月前
输入一个数判断是奇数还是偶数,并输出结果
输入一个数判断是奇数还是偶数,并输出结果
|
4月前
|
Python
如何判断一个数是质数? 要求:编写一个Python函数,输入一个整数,输出该整数是否为质数。质数是指大于1的自然数中,除了1和它本身以外不再有其他因数的数。
如何判断一个数是质数? 要求:编写一个Python函数,输入一个整数,输出该整数是否为质数。质数是指大于1的自然数中,除了1和它本身以外不再有其他因数的数。
231 1
|
4月前
2.任意输入三个数,求最大数
2.任意输入三个数,求最大数
29 0
|
4月前
对任意给定的两个正整数,100<n<m<1000,计算这两个数之间所有素数和,包含m,n自身
对任意给定的两个正整数,100<n<m<1000,计算这两个数之间所有素数和,包含m,n自身
38 0
对任意给定的两个正整数,100<n<m<1000,计算这两个数之间所有素数和,包含m,n自身
定义一个长度为10的整型数组,循环输入10个整数。 然后将输入一个整数,查找此整数,找到后输出下标,没找到给出提示。
定义一个长度为10的整型数组,循环输入10个整数。 然后将输入一个整数,查找此整数,找到后输出下标,没找到给出提示。
200 0
|
Java 测试技术
Java数字分类给定一系列正整数,请按要求对数字进行分类,并输出以下5个数字:A1 = 能被5整除的数字中所有偶数的和;A2 = 将被5除后余1的数字按给出顺序进行交错求和,即计算n1-n2+n3
Java数字分类给定一系列正整数,请按要求对数字进行分类,并输出以下5个数字:A1 = 能被5整除的数字中所有偶数的和;A2 = 将被5除后余1的数字按给出顺序进行交错求和,即计算n1-n2+n3
188 0
Java数字分类给定一系列正整数,请按要求对数字进行分类,并输出以下5个数字:A1 = 能被5整除的数字中所有偶数的和;A2 = 将被5除后余1的数字按给出顺序进行交错求和,即计算n1-n2+n3
计算一个数的每位之和(递归) 例如,用函数DigitSum(1729),则返回1+7+2+9,和为19 输入1729,输出19
计算一个数的每位之和(递归) 例如,用函数DigitSum(1729),则返回1+7+2+9,和为19 输入1729,输出19
102 0
计算一个数的每位之和(递归) 例如,用函数DigitSum(1729),则返回1+7+2+9,和为19 输入1729,输出19
编写输出1~100之间的素数,要求每行显示5个数
编写输出1~100之间的素数,要求每行显示5个数
输入一个整形数组,实现一个函数,来调整该数组中数字的顺序//使得数组中所有奇数位于数组的前半部分,所有偶数位于数组的后半部分
输入一个整形数组,实现一个函数,来调整该数组中数字的顺序//使得数组中所有奇数位于数组的前半部分,所有偶数位于数组的后半部分
127 0