Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <math.h>
- #include <iostream>
- #include <sstream>
- #include <string>
- using namespace std;
- unsigned n = 0;
- /* Редица */
- int a[1000000];
- /* Търсена сума */
- int sum;
- void checkSol(){
- unsigned i;
- int tempSum = 0;
- for (i = 0; i < n-2; i++) tempSum += a[i];
- if (tempSum == a[n-2]) { /* намерено е решение => отпечатваме го */
- cout << a[0];
- for (i = 1; i < n-2; i++)
- if (a[i] > 0) cout <<"+"<< a[i];
- else cout<< a[i];
- cout <<"=" << tempSum << endl;
- }
- }
- void variate(unsigned i){
- if (i >= n-2) {
- checkSol();
- return;
- }
- a[i] = abs(a[i]); variate(i + 1);
- a[i] = -abs(a[i]); variate(i + 1);
- }
- int main(void) {
- string tst;
- while( getline( cin, tst )){
- istringstream is( tst );
- while( is >> a[n++] );
- variate(1);
- cout << endl;
- n = 0;
- }
- return 0;
- }
- /*
- Задача 3а. [1.3.2, стр.81, sumzero.c]
- Нека са дадени числата a1, a2, ..., an. Да се поставят операции "+" и "-" между числата ai и ai+1 за i = 1, 2, ...,
- n-1 така, че резултатът след пресмятане на получения израз да бъде равен на зададено число b (1 < n < 20).
- Вход:
- На входа се задават редици от n + 1 числа a1, a2, ..., an, b - всяка редица на отделен ред. Всички числа са цели в интервала [1, 1000].
- Изход:
- За всяка редица от входа се отпечатват на отделни редове изразите със сума b. Празен ред разделя решенията за различните редици от входа.
- Пример:
- 1 1 0
- 1 2 3 4 5 6 7 8 0
- 3 4 2
- 30 20 40 10
- Решение на примера:
- 1-1=0
- 1+2+3+4-5-6-7+8=0
- 1+2+3-4+5-6+7-8=0
- 1+2-3+4+5+6-7-8=0
- 1+2-3-4-5-6+7+8=0
- 1-2+3-4-5+6-7+8=0
- 1-2-3+4+5-6-7+8=0
- 1-2-3+4-5+6+7-8=0
- */
Advertisement
Add Comment
Please, Sign In to add comment