输入n个数组,数组长度不等,每个数组取出一个数进行组合,求出所有的组合。
转载声明:原文转自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个数组,数组长度不等,每个数组取出一个数进行组合,求出所有的组合。的更多相关文章
- 有一个array的数组,长度为10000,大小不一,用算法找出该数组中的最大值。
不用算法的答案是: var a=[1,2,3,5……];alert(Math.max.apply(null, a));//最大值alert(Math.min.apply(null, a));//最 ...
- 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 ...
- 输入一个正整数n (1<n<=10),生成 1个 n*n 方阵 求出对角线之和
#define _CRT_SECURE_NO_WARNINGS #include <Windows.h> #include <stdio.h> #include <std ...
- Java - 数组详解(图解数组的基本操作)
目录 什么是数组 数组的定义和内存分配 数组的赋值和访问 数组的注意事项 数组的内存图解 数组的插入 数组的删除 数组的扩容 数组的反转 首先 什么是数组 数组是一组地址连续.长度固定的具有相同类型的 ...
- JavaScript jQuery 中定义数组与操作及jquery数组操作
首先给大家介绍javascript jquery中定义数组与操作的相关知识,具体内容如下所示: 1.认识数组 数组就是某类数据的集合,数据类型可以是整型.字符串.甚至是对象Javascript不支持多 ...
- 05-02 Java 一维数组、内存分配、数组操作
数组的定义 动态初始化 /* 数组:存储同一种数据类型的多个元素的容器. 定义格式: A:数据类型[] 数组名; B:数据类型 数组名[]; 举例: A:int[] a; 定义一个int类型的数组a变 ...
- JavaScript jQuery 中定义数组与操作及jquery数组操作 http://www.jb51.net/article/76601.htm
首先给大家介绍javascript jquery中定义数组与操作的相关知识,具体内容如下所示: 1.认识数组 数组就是某类数据的集合,数据类型可以是整型.字符串.甚至是对象Javascript不支持多 ...
- js数组详解,js数组操作
转自 http://www.cnblogs.com/qiantuwuliang/archive/2011/01/08/1930499.html 1.数组的创建 var arrayObj = new A ...
- 《剑指Offer》第1题(Java实现):在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
一.题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该 ...
随机推荐
- 寻找序列中最小的第N个元素(partition函数实现)
Partition为分割算法,用于将一个序列a[n]分为三部分:a[n]中大于某一元素x的部分,等于x的部分和小于x的部分. Partition程序如下: long Partition (long a ...
- hdu 2087 剪花布条 KMP多次匹配
剪花布条 Problem Description 一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案.对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢? I ...
- 一名IT从业者的英语口语能力成长路径
一名IT从业者的英语口语能力成长路径 来源: 微信公众号 发布时间: 2014-03-12 22:53 阅读: 6134 次 推荐: 24 原文链接 [收藏] 这篇文章是我最近十天口 ...
- Cent OS 常用 命令
1.开机自动联网操作 需要root权限 vim /etc/sysconfig/network-scripts/ifcfg-p4p1(p4p1 为网络链接名称)这个文件, 把ONBOOT="n ...
- Lucene基础(四)-- 结合数据库使用
需求 很多时候我们在用数据库的需要使用模糊查询,我们一般会使用like语句来做,然而这样的做的效率不是很多(很抱歉我们亲自去测,很多都这么说的),那么使用Lucene来检索的话,效率会高很多. luc ...
- 转--Server “**” has shut down the connection prematurely一例分析
近几天在性能测试过程中,发现loadrunner Controller经常报 Server “**” has shut down the connection prematurely .概率很高,现象 ...
- [状压dp]HDU3001 Travelling
题意: 走n个城市, m条路, 起点任意, 每个城市走不超过两次, 求最小花费, 不能走输出-1. $1\le n\le 10$ 分析: 每个城市的拜访次数为0 1 2, 所以三进制状压, 先预处理1 ...
- Type-C设计上的防护
Type C设计上各家芯片公司都提供了很多方案,但在防护方面很多留给了客户自己选择,这方面我可以重点聊聊,说起防护,无非就是过压过流防护. 过压防护,Type C的信号线有很多,都需要做静电防护,US ...
- 一个灵巧的Delphi多播实事件现方案
一个灵巧的Delphi多播实现方案.必须是支持泛型的Delphi版本.也就是Delphi2009以后.强烈建议用DelphiXE. 用法就是例如写一个Class指定一个Event,触发的时候会通知多个 ...
- 转载爱哥自定义View系列--Paint详解
上图是paint中的各种set方法 这些属性大多我们都可以见名知意,很好理解,即便如此,哥还是带大家过一遍逐个剖析其用法,其中会不定穿插各种绘图类比如Canvas.Xfermode.ColorFilt ...