Една кратка реализация на С++:
- Код: Избери целия код
#include <iostream>
#include <vector>
#include <climits>
using namespace std;
int main()
{
size_t n;
cin >> n;
int maxNumber = INT32_MIN, number;
long sum = 0;
for (size_t i = 0; i < n; ++i)
{
cin >> number;
sum += number;
maxNumber = max(maxNumber, number);
}
if (sum == 2 * maxNumber)
{
cout << "Yes, " << maxNumber;
}
else
{
cout << "No, " << abs(sum - maxNumber);
}
return 0;
}
Логиката ти е правилна, единствено може да се оптимизира, че за целите на задачата не е нужно да съхраняваме числата, които сме прочели, т.е. можем да се реши и с т.нар. "онлайн" алгоритъм. Правилно си съобразил иначе, че ако съществува търсеното число, то трябва да е най-голямото (иначе ако има по-голямо от него, сумата на останалите ще е по-голяма). Разбира се, това важи единствено при ограничението, че входовете са неотрицателни. Иначе от цикъла не можем да избягаме, но този вариант ще оставя на теб да разпишеш. Успех!