Подбор знаков
От: Dr_Sh0ck Беларусь  
Дата: 14.08.02 23:43
Оценка:
Не знаю кому это может понадобиться. Просто делал когда-то кому-то. Вообщем есть ряд цифр 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");
}
Do not fake yourself ;)
ICQ#: 198114726
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.