Дан набор из N целых положительных чисел. Необходимо выбрать из набора произвольное количество чисел так, чтобы их сумма была как можно больше и при этом не делилась на 4. В ответе нужно указать количество выбранных чисел и их сумму, сами числа выводить не надо. Если получить нужную сумму невозможно, считается, что выбрано 0 чисел и их сумма равна 0.
Описание входных и выходных данных
В первой строке входных данных задаётся количество чисел N (1 ≤ N ≤ 1000).
В каждой из последующих N строк записано одно натуральное число, не превышающее 10 000.
Пример входных данных:
3
1
6
5
В результате работы программа должна вывести два числа: сначала количество выбранных чисел, затем их сумму.
Пример выходных данных для приведённого выше примера входных данных:
2 11
В данном случае из предложенного набора нужно выбрать два числа (6 и 5), их сумма равна 11.
Источник: onlyege
Решение:
Если сумма всех данных чисел не кратна 4, нужно просто взять все числа.
Если сумма кратна 4, нужно удалить из неё минимально возможный элемент – наименьшее из заданных чисел, не кратное 4. Если таких чисел нет (все числа в наборе кратны 4), то получить требуемую сумму невозможно, в этом случае по условию задачи ответ считается равным нулю.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
#include <iostream> using namespace std; const int d = 4; //делитель} const int amax = 10000; //максимально возможное число int main() { int N; //количество чисел int a; //очередное число int s; //сумма int mn; //минимальное число, не кратное d int k; //количество выбранных чисел int i; cin >> N; s = 0; mn = amax+1; for(i=0; i<N; i++){ cin>>a; s = s+a; if (a % d != 0 && a < mn) mn = a; } if (s % d != 0) k = N; else if (mn <= amax){ k = N-1; s = s - mn; } else { k = 0; s = 0; } cout<<k<<" "<<s; return 0; } |