Фрагмент программы будет выполнятся вечно, значение переменной c получить нельзя.
Объяснение:
Присваиваем переменной a число 100:
a:=100;
Присваиваем переменной b число 20:
b:=20;
Далее идёт цикл с постусловием, выполняем тело, пока b не станет больше или равна 100:
repeat
i:= a div b;
c:=i + 5;
b:= a div b;
until b>=100;
Смотрим:
i = a div b = 100 div 20 = 5c = i + 5 = 5 + 5 = 10 b = a div b = 100 div 20 = 5
b>=100 ? нет => ещё раз:
i = a div b = 100 div 5 = 20c = i + 5 = 20 + 5 = 25b = a div b = 100 div 5 = 20
Переменная b изначально была равна 20, а через 2 прохода цикла, она также стала 20. Делаем вывод: это замкнутый цикл, выполнятся он будет вечно, так как переменная b никогда не будет >=100.
Фрагмент программы будет выполнятся вечно, значение переменной c получить нельзя.
Объяснение:
Присваиваем переменной a число 100:
a:=100;
Присваиваем переменной b число 20:
b:=20;
Далее идёт цикл с постусловием, выполняем тело, пока b не станет больше или равна 100:
repeat
i:= a div b;
c:=i + 5;
b:= a div b;
until b>=100;
Смотрим:
i = a div b = 100 div 20 = 5c = i + 5 = 5 + 5 = 10 b = a div b = 100 div 20 = 5b>=100 ? нет => ещё раз:
i = a div b = 100 div 5 = 20c = i + 5 = 20 + 5 = 25b = a div b = 100 div 5 = 20Переменная b изначально была равна 20, а через 2 прохода цикла, она также стала 20. Делаем вывод: это замкнутый цикл, выполнятся он будет вечно, так как переменная b никогда не будет >=100.
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
void solve(){
int n, sum = 0;
bool ok = false;
cin >> n;
vector<int> a(n);
for(auto &i: a) { cin >> i; sum += i;}
sort(a.begin(), a.end());
for(int i = 0; i < n; i++){
int l = i + 1, r = n - 1;
while(l <= r && !ok){
int m = (l + r) / 2;
if(a[m] < sum - a[i])
l = m + 1;
else if(a[m] > sum - a[i])
r = m - 1;
else
ok = true;
}
}
cout << (ok ? "YES" : "NO");
}
int main(){
solve();
}