gpt4 book ai didi

c - 查找 c 中带有条件的所有排列

转载 作者:行者123 更新时间:2023-11-30 20:31:57 26 4
gpt4 key购买 nike

我想在c中生成所有长度为L的数组,其中元素的总和N是固定的。例如,对于 L=3 和 N=2 应该得到

 {0,0,2}, 
{0,1,1},
{0,2,0},
{1,0,1},
{1,1,0},
{2,0,0}

我找到了几篇关于如何在 Mathematica 中执行此操作的帖子,但是在 c 中执行此操作的有效方法是什么?

我正在考虑使用以 3 为基数的表示形式来生成所有可能的数字,然后将这些数字一位一位地取出并放入一个数组中。

以 3 为基数的转换可以通过

完成
int BaseConvert(int number,int base){
if(number == 0 || base==10) return number;

return (number % base) + 10*BaseConvert(number / base, base);
}

最后一部分可以用

完成
void ConvertNumberToVec(int x,std::vector<int> & vec)
{
int digit;
std::vector<int> vec0;

while(x > 0){
digit = x%10;
vec0.push_back(digit);
x /= 10;
}
std::reverse(vec0.begin(), vec0.end());
vec = vec0;
}

或者这是更好的方法?

最佳答案

你可以编写递归算法:

permutation = []f(L, N):  if L is 0:    if N is 0:      print permutation    return  for i in 0..N:    permutation.push_back(i)    f(L - 1, N - i)    permutation.pop_back()

易于使用 c 编写代码。

关于c - 查找 c 中带有条件的所有排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49267383/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com