这个题貌似完全颠覆一般的Logic:交换两个整数需要一个额外的空间用于保存: t = b; b = a; a = t; 粗看上去似乎没有办法,但是仔细想一下,既然不能用额外的空间,那么能用的方法就只有数学方法,也许有效,那么第一个想法就是用A+b看看,稍微想一下就可以得到下面这个解法: a = a + b; b = a - b; a = a - b; 这种方法会有问题,a+b有可能溢出,但异或就不会有溢出问题. 还有更绝的(由DxZ网友提供): a = a ^ b;b = a ^ b;a
题目:编程求解,输入两个整数n和m,从数列1,2,3,……n中随意取几个数,使其和等于m.要求将所有的可能组合列出来. 分析:分治的思想.可以把问题(m,n)拆分(m - n, n -1)和(m, n - 1). 注意点:1.n大于m时,可直接从n = m出开始搜索 2.结束条件:n < 1 || m < 1 3.打印输出结果.注意打印输出结果并不代表函数调用结束,以n = 7 和 m = 10为例,7.3和7.2.1都是一种结果,不能得到7.3的时候终止.打印输出的条件是n = m 程序代码