从C中的数字字符串中查找数字组合的总和

时间:2016-03-08 21:01:13

标签: c arrays split numbers sum

我需要帮助解决一个问题。 我有两个号码。首先是"数字字符串" (我用字符串表示),我需要将它分成任何数字组合,它们的总和给我第二个数字。 例如:888 24 我需要把它分成8 + 8 + 8 返回的数字是+元素的数量。例如答案2。 将它分成每一个数字很容易,但我不知道如何在不同的情况下做到这一点。

1234 46  (12+34)
1234 127 (123+4)
101 2    (1+01)

当我找不到任何组合时,返回值是不可能的。

我有这个将字符串拆分成数字,但我不知道如何成功应用它:/

long** printComb(char *line, int l, int lp, int r, int rp){

char **vys;
  vys = (char**) malloc(2*sizeof(char*));
  vys[0] = (char*) malloc(lp*sizeof(char));
  vys[1] = (char*) malloc(rp*sizeof(char));
  int i;

  for(i = 0; i < lp; i++)
    vys[0][i] = line[l+i];
  vys[0][i] = '\0';

  for(i = 0; i < rp; i++)
    vys[1][i] = line[r+i];
   vys[1][i] = '\0';


  return vys;
}

感谢您的每一条建议:)

1 个答案:

答案 0 :(得分:0)

这是一个组合问题。残酷的力量方式将结合所有可能的值,然后过滤那些已达到您想要的值。例如:

  
      
  • 123 :( 123); (1,23); (12,3); (1,2,3);
  •   

假设我们想要找到一个给出 15 的总和,答案将是(12,3)。另一个例子可能是:

  
      
  • 1234 :( 1234); (1,234); (12,34); (123,4); (1,2,34); (1,23,4); (12,3,4); (1,2,3,4);
  •   

而且,正如你所说,如果我们想找到一个能够提供 46 的总和,答案就是(12,34)

可以在Finding all possible combinations of numbers to reach a given sum找到其他语言(如Python)的一组解决方案。另外,如果您在C中实现此操作有任何困难,请查看http://www.geeksforgeeks.org/print-all-possible-combinations-of-r-elements-in-a-given-array-of-size-n/,然后将想法扩展为从1到N个元素组合,其中N是字符串的大小。