【发布时间】:2018-04-20 06:11:26
【问题描述】:
我想列出所有安排,以下是我的示例代码:
const unsigned char item1[] = {'b'};
const unsigned char item2[] = { 'A', 'C' ,'D'};
const unsigned char item3[] = {'1','2'};
int _tmain(int argc, _TCHAR* argv[])
{
for (int i = 0; i < sizeof(item1) / sizeof(unsigned char); i++){
for (int j = 0; j < sizeof(item2) / sizeof(unsigned char); j++){
for (int k = 0; k < sizeof(item3) / sizeof(unsigned char); k++){
printf("%c%c%c\n",item1[i],item2[j],item3[k]);
}
}
}
return 0;
}
这将打印所有排列,但我担心如果数组项是从item1 到item99,代码很难维护。是否有更好的解决方案来打印所有安排?谢谢!
【问题讨论】:
-
我说得不好,但你要找的可能是一个向量的向量,用递归函数处理。
-
您可以使用
#define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0]))减少数组长度计算 -
@Hamed 我不确定您所说的“几个循环”是什么意思。我理解“几个循环”==“很少循环”。 OP 'item1' 到 'item99' 似乎他们在谈论要由 100 个循环处理的 100 个项目,这在更改为向量向量时仍然适用。我可能误解了你的意思。随意详细说明。
-
@Hamed,他需要显示所有组合,对于 n=100,它是 1000000 个组合,对于三个数组,它是三个 lop 语句
-
如果您想为每个数组和 100 个不同的数组执行此操作,请准备好等待。如果平均循环持续时间为 1ns,则总时间约为 400 亿年。大约是宇宙存在时间的 4 倍......
标签: c++ permutation