VasilM

3a_sum_all

Dec 8th, 2012
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.01 KB | None | 0 0
  1. #include <math.h>
  2. #include <iostream>
  3. #include <sstream>
  4. #include <string>
  5.  
  6. using namespace std;
  7.  
  8. unsigned n = 0;
  9. /* Редица */
  10. int a[1000000];
  11. /* Търсена сума */
  12. int sum;
  13.  
  14. void checkSol(){
  15.     unsigned i;
  16.     int tempSum = 0;
  17.     for (i = 0; i < n-2; i++) tempSum += a[i];
  18.     if (tempSum == a[n-2]) { /* намерено е решение => отпечатваме го */
  19.         cout << a[0];
  20.         for (i = 1; i < n-2; i++)
  21.             if (a[i] > 0) cout <<"+"<< a[i];
  22.             else cout<< a[i];
  23.     cout <<"=" << tempSum << endl;
  24.     }
  25. }
  26.  
  27. void variate(unsigned i){
  28.     if (i >= n-2) {
  29.         checkSol();
  30.         return;
  31.     }
  32.   a[i] = abs(a[i]);  variate(i + 1);
  33.   a[i] = -abs(a[i]); variate(i + 1);
  34. }
  35.  
  36. int main(void) {
  37.  
  38.     string tst;
  39.  
  40.     while( getline( cin, tst )){
  41.          istringstream is( tst );
  42.          while( is >> a[n++] );
  43.          variate(1);
  44.          cout << endl;
  45.          n = 0;
  46.     }
  47.  
  48.   return 0;
  49. }
  50. /*
  51. Задача 3а. [1.3.2, стр.81, sumzero.c]
  52. Нека са дадени числата a1, a2, ..., an. Да се поставят операции "+" и "-" между числата ai  и ai+1 за i = 1, 2,  ...,
  53. n-1 така, че резултатът след пресмятане на получения израз да бъде равен на зададено число b (1 < n < 20).
  54.  
  55. Вход:
  56. На входа се задават редици от n + 1 числа a1, a2, ..., an, b - всяка редица на отделен ред. Всички числа са цели в интервала [1, 1000].
  57.  
  58. Изход:
  59. За всяка редица от входа се отпечатват на отделни редове изразите със сума b. Празен ред разделя решенията за различните редици от входа.
  60.  
  61. Пример:
  62. 1 1 0
  63. 1 2 3 4 5 6 7 8 0
  64. 3 4 2
  65. 30 20 40 10
  66.  
  67. Решение на примера:
  68. 1-1=0
  69.  
  70. 1+2+3+4-5-6-7+8=0
  71. 1+2+3-4+5-6+7-8=0
  72. 1+2-3+4+5+6-7-8=0
  73. 1+2-3-4-5-6+7+8=0
  74. 1-2+3-4-5+6-7+8=0
  75. 1-2-3+4+5-6-7+8=0
  76. 1-2-3+4-5+6+7-8=0
  77. */
Advertisement
Add Comment
Please, Sign In to add comment