2016-03-08 2 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

Добро пожаловать в переполнение стека! [Пожалуйста, ознакомьтесь с этим обсуждением, почему бы не использовать возвращаемое значение 'malloc()' и family в 'C'.] (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 - размер строки.

Смежные вопросы