给一个参数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));
}
分享到:
相关推荐
分析:求解k个数的不同...素是不重复的,可以约定其递增排列,因为数组中的元素是递增排列的: 所以a[k-1]即组合中的最后一个数,只能为k~n 令i=a[k-1] 则 i>=k && i<=n 完整代码请参考我的博客文章,这里只是核心部分
给定n 位正整数a,去掉其中任意k≤n 个数字后,剩下的数字按原次序排列组成一个 新的正整数。对于给定的n位正整数a 和正整数k,设计一个算法找出剩下数字组成的新数 最小的删数方案。 «编程任务: 对于给定的正...
给定一个整数n,求出所有连续的且和为n正整数。比如对于整数27,结果为2~7、8~10、13和14,因为这些数之间的整数的和都是27。注意:并不是所有的整数都有结果,例如不存在连续的整数和为16。为了提高计算的效率,...
在本文中,我们将深入探讨如何使用C语言编写一个程序,以计算用户输入的整数n的1到n的总和及平均数。C语言是一种强大的、低级别的编程语言,广泛用于系统开发、软件工程和嵌入式系统。下面,我们先来理解程序的基本...
本文探讨的问题是“删数问题算法程序(排列成一个新的正整数)”,该问题要求从一个给定的正整数中删除指定数量的数字,使剩余数字按原有顺序排列形成的新数尽可能小。 **问题描述:** - 给定一个长度为 \( n \)(\...
在计算机科学和数学中,计算从n个正整数中选择k个数的不同组合数是一项基本的任务,这涉及到组合数学中的组合(Combination)概念。组合是指从一个集合中不考虑顺序取出k个元素的方法数,它与排列(Permutation)...
实现 整数1-n的所有的排列并且打印出来
有1个包含N个整数的数组A,定义1个数组的美丽值为数组中所有不同整数的和。求数组A的所有连续子序列的美丽值之和。
输入一个整数n,代表接下来输入整数个数,n,接着输入n个整数,整数用int表示即可。 输出描述 输出整数序列的和、最小值、最大值。用空格隔开,占一行 样例输入 2 1 2 样例输出 3 1 2 提交代码 自己编写的基础知识...
在这个编程问题中,我们需要实现一个程序来处理一个正整数,按照特定的规则生成一系列新的整数,并将它们按升序排列输出。这个问题涉及到的主要知识点包括C++编程、一维数组的操作、冒泡排序算法以及输入输出的处理...
阶乘是一个数与小于等于它的所有正整数的乘积,表示为n!。例如,5! = 5 × 4 × 3 × 2 × 1 = 120。 为了计算从1到n的阶乘求和,我们可以采用以下步骤: 1. **初始化变量**:首先,我们需要一个变量来存储当前的...
在本题目中,我们需要编写一个C语言程序,用于计算从1到给定正整数N之间所有整数中数字"1"出现的总次数。这是一个典型的字符串处理和数学计算问题,涉及到了数字转换、字符串遍历以及计数算法。下面我们将深入探讨这...
【NP难问题(整数求和)】是一个关于计算理论和程序设计的议题,涉及到计算机科学中的核心概念——复杂度理论。在这个问题中,我们关注的是如何高效地处理整数求和的问题,尤其是在数据量巨大时。由于描述中提到了...
在C++编程中,"输出n个整数的所有子集"是一个常见的数据结构与算法问题。这个问题涉及到集合论和位运算,是理解计算机科学中基本概念的一个好练习。在这个实验一中,我们的目标是设计一个程序,它能够接收n个整数...
阶乘是一个正整数n与小于它的所有正整数的乘积,表示为n!。例如,5的阶乘(5!)等于5 × 4 × 3 × 2 × 1 = 120。对于0和1,它们的阶乘定义为1。 现在,我们来看如何用Java编写一个计算阶乘的程序。 ### 循环方式...
对于任意给定的数n,如果从2到√n的所有整数都不能整除n,那么n就是素数。这是因为如果n有一个大于其平方根的因数a,那么必然存在一个小于或等于其平方根的因数b,使得a * b = n。所以,我们只需要检查小于或等于√n...
/*加和*/ //给定一个整数t,以及n个整数,在这n个整数中找到加和为t的所有组合。
System.out.println(chs.length + "取" + n + "不重复的排列组合个数为" + total); } ``` ##### 3.2 重复排列组合 ```java // 重复排列组合 public static int loop(int start, int end, char[] chs, String msg, ...
2. **实现比较方法:** 编写一个`compareInt`方法,该方法接受两个整数作为参数,并返回一个整数。如果第一个数放在前面组成的数字更大,则返回负数;如果第二个数放在前面组成的数字更大,则返回正数;如果两者相等...
输入的第一行只有一个正整数n(1 ≤ n ≤ 1000),表示数字的个数。 输入的第二行有n个整数s1, s2, …, sn (1 ≤ si ≤ 10000, 1 ≤ i ≤ n)。相邻的数用空格分隔。 输出格式 输出这n个次数中出现次数最多的数。...