我需要帮助解决一个问题。 我有两个号码。首先是"数字字符串" (我用字符串表示),我需要将它分成任何数字组合,它们的总和给我第二个数字。 例如: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;
}
感谢您的每一条建议:)
答案 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是字符串的大小。