一个数组,int[] a = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 }; 长度为11,任意5个相加等于35,要求5元素不能相连。如:1,2,3,4,5 这5个相连了(不行哦),求出所有的组合?我用二次循环还是写不出,关键是5元素不能相连不知道怎么写,想很久了,没思路。
解决方案 »
- swing 程序如何访问URL地址
- 进来看看都有分啊!
- 请XML高手帮我分析下java解决这个问题的思路(不要求具体代码),谢谢
- 问scrollRectToVisible(new Rectangle(150,150,300,300));的用法!
- 是不是所有的包都归属于java.lang.object
- 初用JavaBuilder,怎么调整一个AWT Button的大小?
- 哪位大虾能解释一下Java解释器和JVM的关系?JDK中java.exe和JVM的关系?
- 有谁能告诉我,这个程序哪个地方错了!!(新)
- 将java原代码打包成*.jar文件时,可以像*.rar文件那样加密吗?
- 怎样判断一个resultSet是否为空?
- Java正则表达式"句号"问题
- log4j如何配置根据线程生成log文件
当第一个与第二个相连(其实也就是(a[2]-a[1])==1),那么设置b[0] = true;
当第二个与第三个相连,那么设置b[1] = true;
依次类推 等最后结果出来时,判断该组合的b[0] & b[1] & b[2] & b[3]的结果,如果为true则将该结果抛弃。
public static void main(String[] args) {
int[] a= {1,2,3,4,5,6,7,8,9,10,11};
for(int i=0;i<a.length-4;i++){
for(int j=i+1;j<a.length-3;j++)
for(int k=j+1;k<a.length-2;k++)
for(int l=k+1;l<a.length-1;l++)
for(int m=l+1;m<a.length;m++){
if(a[i]+a[j]+a[k]+a[l]+a[m]==35){
if(!(j-i==1&&k-j==1&&l-k==1&&m-l==1))
System.out.println(a[i]+" "+a[j]+" "+a[k]+" "+a[l]+" "+a[m]);
}
}
}
}
}
你这题就有毛病,1,2,3,4,6相加也不等于35啊。你还是想说任意5个数步相连,连续的5个数相加等于35?
错题,无解!要是你自己想的就想明白再发帖
判断 a[0] + a[1] + a[2] + a[3] + a[11] 的值是否大于35 如果是就必须要将 a[11]往前退一位了,以此类推。
找到最大的数后开始判断之前的4个数,a[3]往后进一位成a[4] 判断5个数和是否小于35 小于的话,a[3]退回去把a[2]换成a[4]再判断下。如果一直到a[0]换成a[4]还是小了的话,就将a[3]换成a[5]继续这样判断;中间具体的移位换数楼主自己可以再琢磨下。不多说了 呵呵
上班偷着回帖,实在没时间给写代码
4 楼的代码太暴力了 本题中是11个数好点 换成N 的话 时间复杂度就是O(N^5)了