给定2个数字,n,m,使得从1到n之间的数字组合,他们的和等于m,求所有组合

这个题目也是非常经典的问题,把一个数字分解成多个数字的组合之和,问有多少种可能,并输出。

微软比赛题目,对于这类题目,最为简单的版本就是,给定一个排好序的数字,求,这个数组中的任意两个数字之和,等于给定的值。

这个就相对比较,简单,2个指针,移动他们的位置,和比给定的大,指针往前挪动,否则,另外一个指针往后挪动。

然后,这个是2个数字的情况,那么多个数字怎么考虑??

如下,具体的测试,看上篇文章,这里主要是把程序粘贴了出来。

强调一句,如果,你能理解里面的那个2个递归(helper),他们之间的关系,以及下标i的变化,我只能说你真的明白,递归的过程了,否则,确实不好理解。

class Test1{
	void findAllAnswer(int n,int dest){
		int[]arr=new int[n];
		helper(dest,0,arr,n);
	}

	private void helper(int dest, int i,int[] arr , int n) {
		// TODO Auto-generated method stub
		if(dest==0)
			prints(arr,n);
		if(dest<=0||i==n) return;
			helper(dest,i+1,arr,n);
		arr[i]=1;
		helper(dest-i-1,i+1,arr,n);
		arr[i]=0;
	}

	private void prints(int[] arr, int n) {
		// TODO Auto-generated method stub
		for(int i=0;i<n;i++){
			if(arr[i]==1)
				System.out.print("+"+(i+1));
		}
		System.out.println();
		}
}
如果实在没看懂,请留言。

勾股数是指三个正整数a、b、c,满足a²+b²=c²的数,其中a、b称为勾股数的一组,c为该组的和数。如果给定一个正整数m和n,我们需要找出所有a、b、c的组合,使得m<=a<=b<=c<=n,并且a、b、c是勾股数。 在Python中,我们可以使用嵌套循环来进行筛选和判断。首先,我们可以使用range函数来生成m到n之间数字,然后使用嵌套的循环来进行遍历和条件筛选。 具体的算法流程如下: 1. 遍历m到n之间的所有数字,将每个数字作为c进行判断。 2. 在c的范围内,遍历比c小的所有数字,将每个数字作为b进行判断。 3. 在b的范围内,遍历比b小的所有数字,将每个数字作为a进行判断。 4. 判断a、b、c是否满足勾股数的条件,如果满足,则将它们组合成一个元组,并将这个元组加入到结果列表中。 5. 遍历完整个范围后,返回结果列表。 下面是Python代码实现: def find_pythagorean_triplets(m, n): results = [] for c in range(m, n+1): for b in range(m, c): for a in range(m, b): if a**2 + b**2 == c**2: results.append((a, b, c)) return results 这个函数会返回一个包含所有勾股数元组的列表,其中每个元组都包含了三个勾股数。我们可以调用这个函数来获取m到n之间的所有勾股数,代码如下: results = find_pythagorean_triplets(m, n) print(results) 输出的结果会是一个列表,其中包含了所有勾股数元组。我们可以使用这个列表来进行进一步的计算和分析。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值