输入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实现):在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
一.题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该 ...
随机推荐
- 初探—KMP模式匹配算法
KMP算法思想: 普通的字符串匹配算法S主串必须要回溯.但回溯就影响了效率. 改进的地方也就是这里,我们从P 串本身出发,事先就找准了T自身前后部分匹配的位置,那就可以改进算法. next数组的含义: ...
- 几条特殊的SQL语句
1, 有case情况. select trunc(exf_payment_receipt.work_date),exf_payment_receipt.exchange_code,exf_paymen ...
- SQLServer数据库通用访问类
private static string connString=ConfigurationManager.ConnStrings["connString"].ToString() ...
- Lucene基础(四)-- 结合数据库使用
需求 很多时候我们在用数据库的需要使用模糊查询,我们一般会使用like语句来做,然而这样的做的效率不是很多(很抱歉我们亲自去测,很多都这么说的),那么使用Lucene来检索的话,效率会高很多. luc ...
- python mongodb 读写CSV文件
# -*- coding: utf-8 -*-import osimport csvimport pymongofrom pymongo import MongoClient #建立连接client ...
- 【深度学习系列2】Mariana DNN多GPU数据并行框架
[深度学习系列2]Mariana DNN多GPU数据并行框架 本文是腾讯深度学习系列文章的第二篇,聚焦于腾讯深度学习平台Mariana中深度神经网络DNN的多GPU数据并行框架. 深度神经网络( ...
- android ListView内数据的动态添加与删除
main.xml 文件: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns ...
- HDU 2045 不容易系列之(3)—— LELE的RPG难题(递推)
点我看题目 题意 : 中文题不解释. 思路 :先算了第3个第4个,算的时候发现只要在已经枚举出来的前边的状态中往后添加字母就行了,如果两个的都已经表示出来了,那第三个就可以在每个第二个后边加一个,在 ...
- Universal Asynchronous Receiver/Transmitter
USART簡介與特性 NRZ標準資料格式(Mark/Space) 半雙工/全雙工 Synchronous 同步傳輸 CLOCK SKEW Asynchronous 非同步傳輸 半/全雙工.同步/非同步 ...
- 【HDOJ】3480 Division
斜率dp+滚动数组. /* 3480 */ #include <iostream> #include <sstream> #include <string> #in ...