Нет вася не прав так как в кодировании получилось бы 3 бита
#include <iostream>
using namespace std;
int main() {
int a[50][2];
int n;
int k1=0;
int k2=0;
int k3=0;
int k4=0;
cin >> n;
for (int i = 0; i < n; i++) {
cin >> a[i][0] >> a[i][1];
}
for (int i = 0; i < n; i++) {
if (a[i][1]>0)
if (a[i][0]>0) k1++; else k2++;
else if (a[i][0]>0) k4++; else k3++;
}
if ((k2>=3)or(k2==2)and(k1>3)or(k3>5)or(k4>9))
cout << "Clock is broken" << "\n";
else cout << k2 << k1 << ":" << k3 << k4 << "\n";
return 0;
}
Пример:
<span>10
-1 1
1 1
1 2
-1 -1
-1 -2
-1 -3
1 -1
1 -2
1 -3
1 -4
</span><span>12:34</span>
Тут вот в чем дело. Импликация имеет такую таблицу истинности:
A | B | A->B
0 | 0 | 1
0 | 1 | 1
1 | 0 | 0
1 | 1 | 1
Если первое выражение ложно, то при любом втором выражении результат будет истинным.
0 -> (0 -> (x&A =/= 0)) = 1
0 -> (1 -> (x&A =/= 0)) = 1
То есть все выражение истинно при ЛЮБОМ А.
Поэтому нам нужно искать такие х, при которых 1 выражение истинно.
Если 1 выражение истинно, то результат будет истинным ТОЛЬКО если 2 выражение тоже истинно. Но во 2 выражении тоже импликация!
1 -> (0 -> (x&A =/= 0)) = 1 -> 1 = 1
1 -> (1 -> (x&A =/= 0)) = 1 только если (x&A =/= 0) истинно.
Теперь рассмотрим, при каких х первые два выражения ОБА истинны.
35 = 100011(2); 31 = 011111(2)
35 & 31 = 000011(2) = 3
Чтобы выражение
x&A =/= 0 было истинно, в числе А должна быть 1
в любом из двух младших битов в двоичном представлении.
Минимальное А = 1
Итак...
Если я правильно понял то необходимо узнать стоимость стоимость 100 грамм конфет, а после сколько стоит 1кг200гр, 1кг400гр ну и так далее к 2 кг.
Вам необходимо поделить своё число на 1000, так мы узнаем стоимость 1 грамма. Потом множим это число на 100 и узнаем стоимость 100 грамм конфет. После этого цже не сложно узнать сколько стоит 200, 400, 600, 800 грам. Прибавляем эти числа к нашему натуральному числу в условии и вуаля аолучаем необходимые сведения.