一个数组,长度为11,任意5个相加等于35,要求5个元素不能相连

yang677888 2010-02-01 09:57:41
一个数组,int[] a = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 }; 长度为11,任意5个相加等于35,要求5元素不能相连。如:1,2,3,4,5 这5个相连了(不行哦),求出所有的组合?

我用二次循环还是写不出,关键是5元素不能相连不知道怎么写,想很久了,没思路。
...全文
363 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
yang677888 2010-02-07
  • 打赏
  • 举报
回复
ok 解决了
keeya0416 2010-02-01
  • 打赏
  • 举报
回复
就用你5个数的最大坐标减最小坐标 结果为4的话就是连续的了
yang677888 2010-02-01
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 smartcatiboy 的回复:]
5元素不能相连能再解释下吗?
[/Quote]如:5+6+7+8+9=35 这5个元素相连了
yang677888 2010-02-01
  • 打赏
  • 举报
回复
解决了 不过就是算法的复杂度不行
keeya0416 2010-02-01
  • 打赏
  • 举报
回复
如果是要在已知的数据中找到这样的5个数,不知我下边的建议有用没,上班中,无法给你提供代码,只能给点思路了:
判断 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)了
smartcatiboy 2010-02-01
  • 打赏
  • 举报
回复
5元素不能相连能再解释下吗?
yang677888 2010-02-01
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 py330316117 的回复:]
一个数组,int[] a = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 }; 长度为11,任意5个相加等于35
你这题就有毛病,1,2,3,4,6相加也不等于35啊。你还是想说任意5个数步相连,连续的5个数相加等于35?
错题,无解!要是你自己想的就想明白再发帖
[/Quote]你还不明白我的意思 呵呵
yang677888 2010-02-01
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 keeya0416 的回复:]
楼主你问题描述不清哦
你是给定一个数组要求找到这样的 5 个数 、
还是要得这样的一个数组,该数据的任意5个不全连续的数的和为35啊
[/Quote]给定数组,数组元素是有序的,给定一个数组要求找到这样的5个数的所有组合。除5个元素不能相连,其他可以。如4个相连(5,6,7,8,11)3个、2个都可以相连。
lyh200731 2010-02-01
  • 打赏
  • 举报
回复
不会 帮顶..
joezhpf 2010-02-01
  • 打赏
  • 举报
回复
跟楼上同感,觉得楼主问题描述似乎有点不清楚... 如果是任意 5个数相加都必须得 35.这个11个7是唯一答案.
py330316117 2010-02-01
  • 打赏
  • 举报
回复
一个数组,int[] a = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 }; 长度为11,任意5个相加等于35
你这题就有毛病,1,2,3,4,6相加也不等于35啊。你还是想说任意5个数步相连,连续的5个数相加等于35?
错题,无解!要是你自己想的就想明白再发帖
groovy2007 2010-02-01
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 friedduck 的回复:]
看问题感觉只有{7,7,7,7,7,7,7,7,7,7,7}符合要求。
[/Quote]
同意
keeya0416 2010-02-01
  • 打赏
  • 举报
回复
楼主你问题描述不清哦
你是给定一个数组要求找到这样的 5 个数 、
还是要得这样的一个数组,该数据的任意5个不全连续的数的和为35啊
myj870517 2010-02-01
  • 打赏
  • 举报
回复
汗,不会,友情帮顶
keeya0416 2010-02-01
  • 打赏
  • 举报
回复
判断是不是连续的 只要用你得出的5个数在数组中的下标 用最大的减最小的 结果为4 必然是连续的
结果不为 4 (其实是大于4) 必然不连续
wzchong007 2010-02-01
  • 打赏
  • 举报
回复
顶4楼的.呵.
xietingyan 2010-02-01
  • 打赏
  • 举报
回复
假设b[5]数组表示数在a数组坐标,不连续的充要条件为 b[4]-b[0] != 4 前提 a 和 b都是有序的
keeya0416 2010-02-01
  • 打赏
  • 举报
回复
楼上的 你这代码页太暴力了吧
cs13770722596 2010-02-01
  • 打赏
  • 举报
回复


public class Test {
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]);
}
}
}
}
}

rumlee 2010-02-01
  • 打赏
  • 举报
回复
用二次循环可以啊,每个循环里面先判断一下是不是相连,如果相连则直接continue,否则再判断相加结果,这样应该可以。
加载更多回复(2)

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧