从N个数组分别取值,穷尽全部情况

2024-08-22 09:38

本文主要是介绍从N个数组分别取值,穷尽全部情况,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

要求是这样的:

有N个数组,每个数组元素不定,从每个数组都中取出一个,组成长度为N的序列,求穷尽序列的所有情况。

很明显这区别于给定几个元素并把这些元素全排列的问题,全排列要交换位置,此处则不同,暂称“伪全排列”。

网上资料很多,不过多用指针或者指针数组,这对于JAVA来说没一点用。

在此,我把JAVA中的实现来个详细说明。

首先,思路为递归,将其写为成员函数,方便调用。

具类中体现如下:

copy
  1. public class ABC{   
  2.         private static int[][]str;  
  3.         public ABC() {   
  4.                 ... ...  
  5.                 //str[][]的赋值语句,得到存储完成的二维数组,见‘创建动态二维数组的技巧’  
  6.                 ... ...  
  7.      int result[]=new int[ N ];  //此处即符合要求的,有N个数组  
  8.         show(result,0);  //进入递归函数,进行测试  
  9.         }   
  10.         public static void show(int[] result1, int curr){      //curr即代表当前取元素的数组  
  11.  if (curr == N) {                                            //curr==N即完成一个序列,输出一次结果集  
  12.               for(int k=0;k<result1.length;k++) System.out.print(result1[k]);   
  13.              System.out.println();                          //输出格式控制  
  14.         }  
  15.         else {  
  16.              for (int i = 0; i <str[curr].length; ++i) {     //每次循环此次取元素的数组的长度  
  17.                    result1[curr] = str[curr][i];               //关键赋值处,给到结果集  
  18.                    show(result1, curr+1);                 //一次递归完成,即从下一个数组中去取元素,curr+1.             
  19.             }  
  20.         }  
  21.     }  


以上可完成所有情况的输出,输入集是个二维数组,可方便由多种数据类型转化得到。输出是一维数组,也可方便进行再处理,故代码易改造,简洁明了。以上即是实现的所有代码(测试+方法)

测试如下,从七个数组中取:

[01234],[012],[012345],[0123456],[0123456],[012],[01234]

情况序列计数为66150个,结果集输出正确,此处省略。

这篇关于从N个数组分别取值,穷尽全部情况的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1095910

相关文章

hdu2241(二分+合并数组)

题意:判断是否存在a+b+c = x,a,b,c分别属于集合A,B,C 如果用暴力会超时,所以这里用到了数组合并,将b,c数组合并成d,d数组存的是b,c数组元素的和,然后对d数组进行二分就可以了 代码如下(附注释): #include<iostream>#include<algorithm>#include<cstring>#include<stack>#include<que

hdu 1166 敌兵布阵(树状数组 or 线段树)

题意是求一个线段的和,在线段上可以进行加减的修改。 树状数组的模板题。 代码: #include <stdio.h>#include <string.h>const int maxn = 50000 + 1;int c[maxn];int n;int lowbit(int x){return x & -x;}void add(int x, int num){while

C语言:柔性数组

数组定义 柔性数组 err int arr[0] = {0}; // ERROR 柔性数组 // 常见struct Test{int len;char arr[1024];} // 柔性数组struct Test{int len;char arr[0];}struct Test *t;t = malloc(sizeof(Test) + 11);strcpy(t->arr,

C 语言基础之数组

文章目录 什么是数组数组变量的声明多维数组 什么是数组 数组,顾名思义,就是一组数。 假如班上有 30 个同学,让你编程统计每个人的分数,求最高分、最低分、平均分等。如果不知道数组,你只能这样写代码: int ZhangSan_score = 95;int LiSi_score = 90;......int LiuDong_score = 100;int Zhou

计算数组的斜率,偏移,R2

模拟Excel中的R2的计算。         public bool fnCheckRear_R2(List<double[]> lRear, int iMinRear, int iMaxRear, ref double dR2)         {             bool bResult = true;             int n = 0;             dou

C# double[] 和Matlab数组MWArray[]转换

C# double[] 转换成MWArray[], 直接赋值就行             MWNumericArray[] ma = new MWNumericArray[4];             double[] dT = new double[] { 0 };             double[] dT1 = new double[] { 0,2 };

PHP7扩展开发之数组处理

前言 这次,我们将演示如何在PHP扩展中如何对数组进行处理。要实现的PHP代码如下: <?phpfunction array_concat ($arr, $prefix) {foreach($arr as $key => $val) {if (isset($prefix[$key]) && is_string($val) && is_string($prefix[$key])) {$arr[

Go 数组赋值问题

package mainimport "fmt"type Student struct {Name stringAge int}func main() {data := make(map[string]*Student)list := []Student{{Name:"a",Age:1},{Name:"b",Age:2},{Name:"c",Age:3},}// 错误 都指向了最后一个v// a

如何保证android程序进程不到万不得已的情况下,不会被结束

最近,做一个调用系统自带相机的那么一个功能,遇到的坑,在此记录一下。 设备:红米note4 问题起因 因为自定义的相机,很难满足客户的所有需要,比如:自拍杆的支持,优化方面等等。这些方面自定义的相机都不比系统自带的好,因为有些系统都是商家定制的,难免会出现一个奇葩的问题。比如:你在这款手机上运行,无任何问题,然而你换一款手机后,问题就出现了。 比如:小米的红米系列,你启用系统自带拍照功能后

码蹄集部分题目(2024OJ赛9.4-9.8;线段树+树状数组)

1🐋🐋配对最小值(王者;树状数组) 时间限制:1秒 占用内存:64M 🐟题目思路 MT3065 配对最小值_哔哩哔哩_bilibili 🐟代码 #include<bits/stdc++.h> using namespace std;const int N=1e5+7;int a[N],b[N],c[N],n,q;struct QUERY{int l,r,id;}que