`

给一个参数n,求这个数的所有整数求和排列,不允许有重复

阅读更多
给一个参数n,求这个数的所有整数求和排列,不允许有重复

简单解答,算法还有优化空间


public static void main(String[] args) {
		int n = 10;
		
		int[] pre = new int [(int)Math.sqrt(2 * n)];
		
		p1(n, 1, pre, 0);
		
	}
	
	public static void p1 (int n, int start, int[] pre, int index) {
		int current = 0;
		for (int j = 0; j < index; j ++) {
			current += pre[j];
		}
		
		int r = n - current;
		
		int max = r % 2 == 0 ? r / 2 - 1 : r / 2;
		
		if (start > max) return;
		
		for (int i = start; i < max; i ++) {
			for (int j = 0; j < index; j ++) {
				System.out.print(pre[j] + "  ");
			}
			
			System.out.println(i + "  " + (r - i));

			pre[index] = i;
			
			p1(n, i + 1, pre, index + 1);
		}
		
		for (int j = 0; j < index; j ++) {
			System.out.print(pre[j] + "  ");
		}
		
		System.out.println(max + "  " + (r - max));
	}

分享到:
评论

相关推荐

    Python Cookbook

    15.6 给一个XML-RPC服务提供一个wxPython GUI 544 15.7 使用Twisted的Perspective Broker 546 15.8 实现一个CORBA服务和客户 549 15.9 使用telnetlib执行远程登录 551 15.10 使用SSH执行远程登录 554 15.11 ...

    软件技能训练试题

    - **详细说明**:设计一个函数,接受一个整数作为参数,返回一个布尔值表示该数是否为水仙花数。首先,需提取整数的每一位数字,这可以通过反复除以10并取余实现。接着,计算这些数字的立方和,最后比较这个和与原数...

    Excel新增工具集

    7、多个工作簿中的所有工作表或指定工作表相同位置(区域)求和:打开(复制)一个空白的汇总表,表格格式与要汇总的表相同,凡鼠标选定单元格连续或不连续区域将对所有表格做累加计算。 8、当前工作表中每行记录都...

    C语言程序设计-数组.pdf

    数组在内存中占用连续的空间,这意味着数组的每个元素在内存中都是顺序排列的。这种特性使得数组可以高效地访问元素,但同时也意味着数组的大小在运行时是固定的,且不能动态地进行内存分配。 总之,C语言中的数组...

    C# 面试笔试题 130问

    给定一个正整数n,Fibonacci数列的第n项可以通过前两项之和得出。上述代码使用递归实现,但效率不高,因为存在大量重复计算。 4. 委托和事件:委托是类型安全的方法指针,可以将方法作为参数传递。事件是委托的特殊...

    Java 语言基础 —— 非常符合中国人习惯的Java基础教程手册

    一个单独的对象一般不十分有用,而作为一员出现在包含有许多其他对象的大程序或应 用程序之中,通过这些对象的相互作用,程序员可实现高层次的操作和更负责的功能。某此 对象通过向其他对象发送消息与其他对象进行...

    计算机C语言

    12. **排序与查找**:C语言提供了实现排序算法(如冒泡排序、快速排序)和查找算法(如二分查找)的基础,例如对整数数组进行升序排列。 13. **矩阵操作**:矩阵可以表示为二维数组,对其进行操作如转置、求和等。 ...

    MySQL命令大全

     此后就创建了一个新用户叫:testuser,这个用户只能从localhost连接到数据库并可以连接到test 数据库。下一步,我们必须指定testuser这个用户可以执行哪些操作:  mysql&gt; GRANT select, insert, delete,update ...

Global site tag (gtag.js) - Google Analytics