转载声明:原文转自http://www.cnblogs.com/xiezie/p/5511707.html

昨天晚上,有个朋友找到我,他在用matlab编程,但是遇到一个问题,解决不了。

问题如下:

输入n个数组,数组长度不等,从每个数组取出一个数进行组合,求出所有的组合。

例子:

int a[]={1,2};

int b[]={3,4,5};

可能的组合:{1,3};{1,4};{1,5};{2,3};{2,4};{2,5};

搞了40分钟左右,不辱使命~

JAVA代码实现:

import java.io.BufferedInputStream;
import java.util.ArrayList;
import java.util.Scanner; public class Test { public static void main(String[] args) {
Scanner scanner = new Scanner(new BufferedInputStream(System.in));
     //这里使用ArrayList<ArrayList<Integer>>是为了方便int数组的操作
ArrayList<ArrayList<Integer>> lists = new ArrayList<>();//若已知所以组合的具体个数可以定义容量长度--》提高性能
System.out.println("输入要所有数组的总个数:");
int n = scanner.nextInt();//数组的个数
int[] allLen = new int[n];//所有数组的长度 int index = 0;
int ll = n ;
while(ll--!=0){
System.out.println("输入第" + (index + 1)
+ "个数组的长度:");
int m = scanner.nextInt();//输入一个数组的长度
allLen[index++] = m;
ArrayList<Integer> arrayList = new ArrayList<>(m);
System.out.println("输入第" + index + "个数组的数据:" + "个数为\t" + m);
for(int i = 0 ; i != m ; i ++ ){
arrayList.add(scanner.nextInt());
}
lists.add(arrayList);
} int[] allLenProduct = new int[n];//数组的长度乘积增量
int p = 1; //组合的个数
int l = n;
int index1 = 0; ArrayList<ArrayList<Integer>> results = new ArrayList<>(p);
while(--l!=-1){
allLenProduct[index1] = p;
p=allLen[index1++]*p;
}
for(int i = 0 ; i != p ; i ++ ){
ArrayList<Integer> arrayList = new ArrayList<>(n);
for(int j = 0 ; j != n ; j ++){
arrayList.add(lists.get(j).get(i/allLenProduct[j]%allLen[j]));
}
results.add(arrayList);
} int len = results.size();
System.out.println("所有的组合:");
for(int i = 0 ; i != len ; i ++ ){
ArrayList<Integer> arrayList = results.get(i);
int aLen = arrayList.size();
System.out.print("\t第\t" + (i + 1) + "\t行:\t");
for(int j = 0 ; j != aLen ; j ++){
System.out.print(arrayList.get(j) + " ");
}
System.out.println();
}
scanner.close();
} }

测试:

输入:

输入要所有数组的总个数:
4
输入第1个数组的长度:
2
输入第1个数组的数据:个数为 2
1 2
输入第2个数组的长度:
3
输入第2个数组的数据:个数为 3
4 5 6
输入第3个数组的长度:
3
输入第3个数组的数据:个数为 3
7 8 9
输入第4个数组的长度:
4
输入第4个数组的数据:个数为 4
10 11 12 13

结果:

所有的组合:
第 1 行: 1 4 7 10
第 2 行: 2 4 7 10
第 3 行: 1 5 7 10
第 4 行: 2 5 7 10
第 5 行: 1 6 7 10
第 6 行: 2 6 7 10
第 7 行: 1 4 8 10
第 8 行: 2 4 8 10
第 9 行: 1 5 8 10
第 10 行: 2 5 8 10
第 11 行: 1 6 8 10
第 12 行: 2 6 8 10
第 13 行: 1 4 9 10
第 14 行: 2 4 9 10
第 15 行: 1 5 9 10
第 16 行: 2 5 9 10
第 17 行: 1 6 9 10
第 18 行: 2 6 9 10
第 19 行: 1 4 7 11
第 20 行: 2 4 7 11
第 21 行: 1 5 7 11
第 22 行: 2 5 7 11
第 23 行: 1 6 7 11
第 24 行: 2 6 7 11
第 25 行: 1 4 8 11
第 26 行: 2 4 8 11
第 27 行: 1 5 8 11
第 28 行: 2 5 8 11
第 29 行: 1 6 8 11
第 30 行: 2 6 8 11
第 31 行: 1 4 9 11
第 32 行: 2 4 9 11
第 33 行: 1 5 9 11
第 34 行: 2 5 9 11
第 35 行: 1 6 9 11
第 36 行: 2 6 9 11
第 37 行: 1 4 7 12
第 38 行: 2 4 7 12
第 39 行: 1 5 7 12
第 40 行: 2 5 7 12
第 41 行: 1 6 7 12
第 42 行: 2 6 7 12
第 43 行: 1 4 8 12
第 44 行: 2 4 8 12
第 45 行: 1 5 8 12
第 46 行: 2 5 8 12
第 47 行: 1 6 8 12
第 48 行: 2 6 8 12
第 49 行: 1 4 9 12
第 50 行: 2 4 9 12
第 51 行: 1 5 9 12
第 52 行: 2 5 9 12
第 53 行: 1 6 9 12
第 54 行: 2 6 9 12
第 55 行: 1 4 7 13
第 56 行: 2 4 7 13
第 57 行: 1 5 7 13
第 58 行: 2 5 7 13
第 59 行: 1 6 7 13
第 60 行: 2 6 7 13
第 61 行: 1 4 8 13
第 62 行: 2 4 8 13
第 63 行: 1 5 8 13
第 64 行: 2 5 8 13
第 65 行: 1 6 8 13
第 66 行: 2 6 8 13
第 67 行: 1 4 9 13
第 68 行: 2 4 9 13
第 69 行: 1 5 9 13
第 70 行: 2 5 9 13
第 71 行: 1 6 9 13
第 72 行: 2 6 9 13

输入n个数组,数组长度不等,每个数组取出一个数进行组合,求出所有的组合。的更多相关文章

  1. 有一个array的数组,长度为10000,大小不一,用算法找出该数组中的最大值。

    不用算法的答案是:   var a=[1,2,3,5……];alert(Math.max.apply(null, a));//最大值alert(Math.min.apply(null, a));//最 ...

  2. c语言实现二维数组排序,一个4*5的数组,要求每行都进行升序排列,并求出每行的平均值。

    #include<stdio.h>#define N 5#define M 4void main(){ int x,i,j,k,t,a[M][N]; float sum=0.0; floa ...

  3. 输入一个正整数n (1<n<=10),生成 1个 n*n 方阵 求出对角线之和

    #define _CRT_SECURE_NO_WARNINGS #include <Windows.h> #include <stdio.h> #include <std ...

  4. Java - 数组详解(图解数组的基本操作)

    目录 什么是数组 数组的定义和内存分配 数组的赋值和访问 数组的注意事项 数组的内存图解 数组的插入 数组的删除 数组的扩容 数组的反转 首先 什么是数组 数组是一组地址连续.长度固定的具有相同类型的 ...

  5. JavaScript jQuery 中定义数组与操作及jquery数组操作

    首先给大家介绍javascript jquery中定义数组与操作的相关知识,具体内容如下所示: 1.认识数组 数组就是某类数据的集合,数据类型可以是整型.字符串.甚至是对象Javascript不支持多 ...

  6. 05-02 Java 一维数组、内存分配、数组操作

    数组的定义 动态初始化 /* 数组:存储同一种数据类型的多个元素的容器. 定义格式: A:数据类型[] 数组名; B:数据类型 数组名[]; 举例: A:int[] a; 定义一个int类型的数组a变 ...

  7. JavaScript jQuery 中定义数组与操作及jquery数组操作 http://www.jb51.net/article/76601.htm

    首先给大家介绍javascript jquery中定义数组与操作的相关知识,具体内容如下所示: 1.认识数组 数组就是某类数据的集合,数据类型可以是整型.字符串.甚至是对象Javascript不支持多 ...

  8. js数组详解,js数组操作

    转自 http://www.cnblogs.com/qiantuwuliang/archive/2011/01/08/1930499.html 1.数组的创建 var arrayObj = new A ...

  9. 《剑指Offer》第1题(Java实现):在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

    一.题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该 ...

随机推荐

  1. hdu 4358 Boring counting 离散化+dfs序+莫队算法

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4358 题意:以1为根节点含有N(N <= 1e5)个结点的树,每个节点有一个权值(weight ...

  2. 开发设计模式(六)多例模式(Multition Pattern)

    多例模式实际上就是单例模式的扩充,多例模式又划分为有上限多例模式和无上限多例模式两种,有上限多例模式中的多例类的实例是有上限的,当这个多例类中的上限数值上等于 1 时,此时,多例类退化回到了单例类:而 ...

  3. UIAlertView带textField

    UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"校验登录密码" message:@"" del ...

  4. DB天气app冲刺第一天

    今天算是正式的第一天开始着手做这个app了,前两天作的是嵌入式的大作业,看着书上的例子做了一个小游戏.基本也算完成了作业.主要是为了练手,熟悉android的开发流程.基本明白了.以后好上手了. 今天 ...

  5. 视频边下边播--缓存播放数据流-b

    google搜索“iOS视频变下边播”,有好几篇博客写到了实现方法,其实只有一篇,其他都是copy的,不过他们都是使用的本地代理服务器的方式. 原理很简单,但是缺点也很明显,需要自己写一个本地代理服务 ...

  6. python 批量修改图片大小

    一个文件夹下面有好多图片格式是jpg大小是1920*1080,把它们处理成1280*720并按原先图片的名保存在另一路径下这里首先要找到给定路径下所有的图片文件,然后在修改图片文件的大小,这里用到PI ...

  7. 开发错误日志之FTP协议传输文件问题

    从开发端用FTP协议向服务器(Linux系统)传输文件时,cat -A查询文件内容中行尾会有^M出现. 解决方案:改用SFTP协议上传文件.

  8. Android:一个高效的UI才是一个拉风的UI(一)

    开篇 Android是一个运行在移动终端上的操作系统,跟传统PC最大的不同所在就是移动终端的资源紧缺问题“比较”明显,当然对于一些屌丝机型,应该用“非常“来形容才靠谱.所以经常会出现在一些比较缺乏青春 ...

  9. Android编程中常用的PopupWindow和Dialog对话框

    注意:PopupWindow组件的使用问题,PopupWindow是一个阻塞对话框,如果你直接在Activity创建的方法中显示它,则会报错:android.view.WindowManager$Ba ...

  10. loadrunner throughput(吞吐量)理解

    转自http://www.51testing.com/html/29/n-110129.html   Throughput翻译为吞吐量,按照常规理解网络吞吐量表示在单位时间内通过网卡数据量之和,其中即 ...