查找c

时间:2018-03-13 23:18:04

标签: c algorithm

我想在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;
}

或者这是一种更好的方法吗?

1 个答案:

答案 0 :(得分:0)

您可以编写递归算法:

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。轻松编码。