java算法(1,2,3,5,7,11,13,17,19,23,29,31)12个元素,取出4个元

java算法(1,2,3,5,7,11,13,17,19,23,29,31)12个元素,取出4个元素的所有组合,值为40至47,并且组合不能重复,请用java编程。

第1个回答  推荐于2016-04-03
感觉最简单应该是4层循环,就12个元素,也不用怎么优化。
public class Test {
public static void main(String []args){
int[] arr = {1,2,3,5,7,11,13,17,19,23,29,31};

for(int i=0;i<arr.length-3;i++){
for(int j=i+1;j<arr.length-2;j++){
for(int k=j+1;k<arr.length-1;k++){
for(int h=k+1;h<arr.length;h++){
int sum = arr[i]+arr[j]+arr[k]+arr[h];
if(sum>=40 && sum <=47){
System.out.println(sum+"   "+arr[i]+"  "+arr[j]+"  "+arr[k]+"  "+arr[h]);
}
}
}
}
}
}
}

追问

我有一个问题

修改 数值后

出来的组合数一样吗

追答

修改什么数值?? 修改了那12个元素的值,出来的结果肯定有影响啊。

追问

不是

修改 40至47

这个值

比如说

40至47是73组数据

修改50至57也是73组数据

追答

那可不一定。要修改成150 到 157之间, 就直接不存在这样的组合了。

追问

和你这个差不多

用遍历

好几个大神给了答案

超玄

看不懂

玄而又玄

追答

恩。你是刚学for循环吗?

追问

只看懂遍历

凑合看

大神们编程

不一样

学习 思路和用法

待会我都试试

有的时候不一样

追答

恩,12个元素,不需要优化。 如果优化的话,就应该可以加上 搜索剪枝。

追问

计算机的话 再多元素

如果运算 平常用不成问题

没有必要 象软件那样

追答

恩。采纳了吧。

追问

优化

结果 出来 我看看

我得弄明白

如果大神们

结果一样

本回答被提问者采纳
第2个回答  2015-11-21
// 既然你看不惯我那个方法,就给你个新的方法好了,以答治答。

import java.util.ArrayList;
import java.util.List;

public class Combination
{
public static void print(List list)
{
int sum = 0;
String str = "";
for(Object o : list)
{
String a = o.toString();
sum += Integer.parseInt(a);
str += a + " ";
}
if(sum > 39 && sum < 48){
System.out.println(str);
}
}

public static void combination(int n, int position, List choice_list, List current_choice)
{
for(int i = position; i < choice_list.size(); i++)
{
current_choice.add((Object) choice_list.get(i));
if(current_choice.size() == n)
{
print(current_choice);
}
else
{
combination(n, i + 1, choice_list, current_choice);
}
current_choice.remove(current_choice.size() - 1);
}
}

public static void main(String[] args)
{
List str_list = new ArrayList();
String str = "1,2,3,5,7,11,13,17,19,23,29,31";
String[] arr = str.split(",");
for(int i = 0; i < arr.length; i++){
str_list.add(arr[i]);
}
List current_choice = new ArrayList();
combination(4, 0, str_list, current_choice);
}
}

追问

师傅终于出马啦

师傅问你个问题

为啥不用遍历

追答

看我这个新的方法好么,什么遍历??
都要的啊
还有递归呢
1个的,2个的多个的组合都可以活变的啊

追问

师傅你家我q不

932828657

追答

你这个人见异思迁嘛,问我又问别人,那你去问他好了。

追问

方法不一样

得出结果不一样

上次那个 就不一样

大神

把数组 组合总数加进来

追答

其实,你如果看不懂的话,你可以看看
郭伟guowei郭伟
记仇de小女子
的回答

他们都是嵌套for循环,不过都写死了,多了就麻烦了,不过写法简单,适合初学者看。

追问

大神

我是记事本

运行

不是专业

运行不了

追答

哦,好吧,记事本运行,继续吧,啊,该啊,呵呵

追问

戏弄我

追答

没有,只是觉得你很白痴

追问

就是 白痴

大神 你说运行了

可以复制到exsle

里吗

本回答被网友采纳

java常用算法,给个int数组,数字不连续,找出最小空缺数
public static void main(String[] args) { int[] array = new int[] {1,2,3,6,7,8,9,10,11,12, 13, 14, 15, 16, 17, 18, 19, 20 };\/\/将数组拆分 int minque = 1;if (1 == array[0]){ minque = zhaoque(array);} System.out.println(minque);} public static int...

Python使用遍历循环for输出2~500之间的所有素数,每个素数之间用跳格键...
for j in range(2,101):for i in range(2,j):if j%i==0:break;elif (j-1)==i:print ('{}是素数'.format(j))例如:k = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31]for i in range(100, 998):if (i % 10 + i % 100 \/\/ 10) % 10 == (i \/\/ 100):for...

用1、2、2、3、4、5这六个数字,用java写一个main函数,打印出所有不同的...
import java.util.Arrays;import java.util.List;public class AppandDigitToString { \/ 给一个字符串的后面扩展多个1位数字,形成多个字符串的列表。要求:“4”不能在第三位,“3”与“5”不能相连。param string 被扩展的字符串。param digitList 扩展的数字列表,此列表中的每个数字,都试图扩展...

用1、2、2、3、4、5这六个
public static void main(String[] args){ int[] num={1,2,2,3,4,5};for(int i1=0;i1<6;i1++){ for(int i2=0;i2<6;i2++){ if(i1==i2) continue;for(int i3=0;i3<6;i3++){ if(i1==i3||i2==i3||i3==4) continue;for(int i4=0;i4<6;i4++){ if(i1==i4...

求救,有四个数 1,2,3,5,任意相加(可以重复)等于一个固定值N(<15),列...
算法如下:N=1+1+1+1+1+...+1(共N个1) 一种 若N-1>0 N=2+1+1+1+1+...+1(共N-1个1)N-1种(两个1换个2)若N-2>0 N=3+1+1+1+...+1(共N-2个1)N-2种(三个1换个3)若N-4>0 N=5+1+...+1(共N-4个1)N-4种(五个1换个5,还有2,3换5的情况...

设栈S=(1,2,3,4,5,6,7) ,其中7为栈顶元素。
if((i=!i)!=0) \/\/这句if的意思就是判断 i!=i&&if(i!=0)push(&T,pop(S)); \/\/将栈s中的顶端元素出栈并压入栈t中 else \/\/否则 enqueue(&q,pop(s)); \/\/将栈s中的顶端元素出栈并压入队列q中 (2)mdj+id (3)\/\/二叉树的二叉链表存储表示 typedef struct BiTNode ...

...给出简单的算法或程序实现求第30个数。(java编程)
public class Test{public static int Fibonacci(int n){if (n <= 2)return 1;return Fibonacci(n-1) + Fibonacci(n-2);} public static void main(String[] args){ for (int i = 1; i <= 30; i++) System.out.print(Fibonacci(i) + " "); System.out.print("\\n...

用java编程:输入1~20的整数n,把从1到n的n个整数摆成环,使得该环上任意...
} dfs(1); }}1,2,3,4,7,6,5,8,9,10,13,16,15,14,17,20,11,12,19,18,1,2,3,4,7,6,5,8,9,10,13,16,15,14,17,20,11,18,19,12,1,2,3,4,7,6,5,8,9,10,13,18,19,12,11,20,17,14,15,16,1,2,3,4,7,6,5,8,9,10,19,12,11,20,17,14,15,...

一列数的规则如下: 1、1、2、3、5、8、13、21、34... 求第30位数是多少...
{ public static void main(String[] args) { System.out.println("结果是:"+Test.foo(30));} \/ 常见解法 \/ public static int foo(int i){ int a=1,b=1;int c=0;for(int k=2;k

找两个有序数组的中位数的几种方式
double findMedianSortedArrays_5(int* nums1, int nums1Size, int* nums2, int nums2Size);int main() { clock_t start_t, end_t; double total_t; double mid = 0;\/\/ 1 2 3 4 5 6 7 8 9 10 11 int str1[1000] = { 0, 2, 4, 5, 7, 9, 10, 15, 21, 23, 25 }, \\ str...

相似回答