Не знаю кому это может понадобиться.
Просто делал когда-то кому-то. Вообщем есть ряд цифр 123456789 и надо между цифрами расстовить знаки + и/или — так, чтобы полученное выражение соответствовало введенному с клавиатуры числу. Количество знаков любое. Например вы ввели число 45. Один из возможный таких рядов 1+2+3+4+5+6+7+8+9, а число 1140: 12+345-6+789 и т.д. Могут быть числа которые в такой ряд не раскладываются.
#include <stdio.h>
#define MAX_INDEX 10
#define SYS_BASE 10
long number,digits[MAX_INDEX];
int next = 0;
long FindSolution(long index,long summ)
{
long prev = index, ret_val;
if( prev % SYS_BASE ==0 ) return ( summ == number ? prev : 0 );
for( long i = index; i <= 9; i++ )
{
if( (ret_val = FindSolution((prev % SYS_BASE) + 1, summ + prev)) !=0 )
{
digits[next++] = ret_val;
return prev;
}
if( (ret_val = FindSolution((prev % SYS_BASE) + 1, summ - prev)) !=0 )
{
digits[next++] = ret_val;
return -prev;
}
if( prev % SYS_BASE >= 9 ) return 0;
prev *= SYS_BASE;
prev += i + 1;
}//for
return 0;
}
void main()
{
long ret_val;
puts("\n\nInput number:");
scanf("%ld",&number);
if( (ret_val = FindSolution(1, 0)) !=0 )
{
digits[next] = ret_val;
for(int i = next; i > 0; i--) printf("%+ld", digits[i]);
}
else puts("No such combination");
}