2016-03-08 87 views
1

我需要C中的一個問題的幫助。 我有兩個數字。首先是「數字串」(我用字符串表示),我需要將它分成數字的任意組合,這些數字總和給我第二個數字。 例如:888 24 我需要將它分成8 + 8 + 8 返回的數字是+個元素的數量。在示例是答案2. 拆分成每一個數字很容易,但我不知道如何在不同的情況下做到這一點。從C中的數字字符串找到數字組合的總和

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

歡迎來到Stack Overflow! [請參閱此討論,爲什麼不在'C'中投射'malloc()'和family的返回值。](http://stackoverflow.com/q/605845/2173917)。 –

+1

請注意,你malloc一個lp大小的塊,然後使用該指針來填充lp + 1的值。 –

+0

您返回vys,它是'char **',但函數簽名中返回類型爲'long **':**不好** –

回答

0

這是一個組合的問題。殘酷的力量方式將結合所有可能的值,然後篩選已達到所需值的那些值。例如:

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

假設我們想找到一個總和,讓,答案會是(12,3)。另一個例子可以是:

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

而且,正如你所說,如果我們想找到一個總和,讓,答案會是(12,34)

其他語言(如Python)中的一組解決方案可以在Finding all possible combinations of numbers to reach a given sum找到。另外,如果在C語言中實現這個功能有任何困難,請查看http://www.geeksforgeeks.org/print-all-possible-combinations-of-r-elements-in-a-given-array-of-size-n/,然後將這個想法擴展到從1到N個元素的組合,其中N是字符串的大小。