有m个整数,请求出这m个数中任意n(m>n)个数的和的所有情况,不允许有重复的。
比如说有1,2,3,4,5这5个数,就其中任意2个数和的情况:
1+2=3;
1+3=4;
1+4=5;
1+5=6;
2+3=5;
2+4=6;
2+5=7;
2+6=8;
3+4=7;
3+5=8;
4+5=9;
4+6=10;
5+6=11;
最后的结果为
2,3,4,5,6,7,8,9,10,11
补充:不能有重复,m可能很大,1<=n<=m。
比如说有1,2,3,4,5这5个数,就其中任意2个数和的情况:
1+2=3;
1+3=4;
1+4=5;
1+5=6;
2+3=5;
2+4=6;
2+5=7;
2+6=8;
3+4=7;
3+5=8;
4+5=9;
4+6=10;
5+6=11;
最后的结果为
2,3,4,5,6,7,8,9,10,11
补充:不能有重复,m可能很大,1<=n<=m。
解决方案 »
- 编写一个关于教师的JAVA-BEAN
- LZ已陷入深深的纠结中,关于clone的可见性的问题
- Struts2 optiontransferselect标签老提示错误。。。。
- String 的 split小問題
- struts的问题,请大家给予指教
- 写文件问题,请教大家
- 我是JAVA门外汉,现在因需要,学习JAVA3D
- 如何获得root目录(站点的根目录)的绝对路径?
- The complete java2 certification study guide 哪儿有下载的?
- 请各位大虾给小弟介绍几本关于JAVA的书,我学过C/C++
- java初学GUI的事件处理好难理解、下面的简单代码谁可以看看
- 多线程怎么实时控制,比如说叫你运行立刻获得cup的使用,而不是进入就绪
“不允许有重复的”是说什么?包括指:“选出来的n个数之中不能有重复的” 吗?
那么你例子中的2就得不出来。
两项和与你那个数组遍列即为三项和,三项和与数组遍列就是四项和啦。。
下面是两项和:
1+2=3(flat=1),2的数组下标为1
1+3 =4(flat=2)
1+4=5(flat=3)
2+3=5(flat=2)
2+4=6(flat=3)
3+4=7(flat=3)
flat是这个n项和中数组下标的最大值,用sample存起来 放到list里当我们求三项和:
List<Sample> three=new ArrayList<Sample>();
for(Sample s:list)
for(int i=s.flat+1;i<a.length;i++){
Sample temp=new Sample();
temp=s.表达式+i;
temp.flat=i;
}
这样three中就是三项,以此类推。
到这就差不多了,自已写过递归求n项和。
for(Sample s:list)
for(int i=s.flat+1;i <a.length;i++){
Sample temp=new Sample();
temp=s.表达式+i;
temp.flat=i;
three.add(temp);
}
这个只是给你点思路,梢加修改应该可以用的,这个东西可以用递归或循环实现。
int n = arr.length-1;
int result[] = new int[2*n]; // 用於存放結果
int count = 0;
for (int i=0; i<=n; i++){
for (int j=i; j<=n; j++){
if (i==j){ // 不能自己加自己
continue;
}else{
int value = arr[i]+arr[j];
boolean isre = false; //默認為沒有重複值 // 查找是否有重複值
for(int k=0; k<count; k++){
if (value==result[k]){
isre = true; // 如果有重複值則設為true
}
}
if (!isre){ // 如果沒有重複值則加入結果數組
result[count]=value;
count++;
}
}
}
if (count >= mem.length) {
int tmp = mem[0];
System.out.print(mem[0]);
for (int i = 1 ; i < mem.length ; ++i) {
tmp += mem[i];
System.out.print("+" + mem[i]);
}
System.out.print("=");
System.out.println(tmp);
return;
}
if (off >= src.length) return;
for (int i = off; i < src.length; ++i)
{
// if (!(off == 0) && mem[off] == mem[off - 1]) continue;
mem[count] = src[i];
abc(i + 1, count + 1 , src, mem);
}
}
import java.util.Scanner;public class SumTest{ public static void main(String[] args){
int[] m = new int[]{1,2,3,4,5,6};
/*以下代码是运行输入数组
int mLength;
Scanner input = new Scanner(System.in);
System.out.println("请输入初始数组的长度;");
mLength = input.nextInt();
int[] m = new int[mLength];
for(int i=0;i<mLength;i++){
System.out.println("请输入数组的第;"+i+"个整数:");
m[i] = input.nextInt();
}
*/
int[] n = new int[m.length * m.length];
int nIndex = 0; //结果数组的下标
boolean zeroFlag = false; //记录结果中是否有零。
for(int i=0;i<m.length-1;i++){
for(int j=i+1;j<m.length;j++){
int sum = m[i] + m[j];
Arrays.sort(n);//对结果数组排序
if(Arrays.binarySearch(n,sum)<0){ //判断数组否包含计算结果,若不包含则放入到结果数组,否则继续循环
n[nIndex] = sum;
nIndex++;
if(sum == 0)
zeroFlag = true;
}
}
}
Arrays.sort(n);
if(zeroFlag == true)
System.out.println(0 + ","); //若结果数组包含0,首先输出0
for(int i : n){ //输出其它非0的结果
if(i != 0)
System.out.println(i + ",");
}
}
}
package math;import java.util.ArrayList;
import java.util.List;
import java.util.Random;public class sum {
private static int[] A;
private static List L_OUTER;
private static List L_INNER;
public static void main(String args[]){
A=new int[10];
L_OUTER=new ArrayList();
Random rand=new Random();
for(int i=0;i<A.length;i++){
A[i]=rand.nextInt(100);
};
for(int j=0;j<A.length;j++){
int k=j;
L_INNER=new ArrayList();
while(true){
if(k==A.length-1)break;
System.out.println("j"+j+"k"+k);
L_INNER.add(k-j, A[j]+A[k+1]);
k++;
};
L_OUTER.add(L_INNER);
L_INNER=null;
};
System.out.println(L_OUTER.size());
for(int m=0;m<A.length;m++){
List l_inner=new ArrayList();
l_inner=(List)L_OUTER.get(m);
for(int n=0;n<l_inner.size();n++){
System.out.println("m="+m+" l_inner="+l_inner.size()+" value="+l_inner.get(n));
};}
}}
1+2+4=..;
1+2+5=..;
1+2+6=..; 1+3+4=..;
1+3+5=..;
1+3+6=..; 1+4+5=..;
1+4+5=..; 1+5+6=..;
4个数的时候
。
5个的时候
....
以此类推