Забавный вопрос говорит о том, что он равен, и кажется, что он проверяет несколько четных и нечетных значений. Но это простая скучная математика, поэтому никто не проверяет все случаи. Я также был ленив, и, даже если я больше математики парня, я сделал быструю проверку компьютера с помощью нескольких копировать-вставить:
bool diff = false;
int n = 100;
for(int w = -n; w<n; ++w){
for(int h = -n; h<n; ++h){
int a = (h/2)*w+ ( (h+1)/2-h/2 ) * (w+1)/2 ;
int b = (w * h + 1)/2;
if (a!=b) diff = true;
}
}
cout << (diff ? "a != b" : "a == b") << endl;
И я обнаружил, что это не равно при со = -1 и Н = -1, легко проверить, что тогда a = 0 и b = 1. Вот как «приятное упрощение» часто вводит новую ошибку.
PS: Чтобы быть справедливым, я предполагаю, что w и h - ширина и высота, поэтому они, вероятно, всегда положительны. Но это не было указано (и, по опыту, какой-то другой код может вернуть отрицательную ширину)
В общем или для конкретных значений? Как вы обнаружили это случайно? –
И неправильная домашняя работа при этом. –
в целом. и это не домашнее задание. Я нашел его при решении проблемы с алгоритмом и сравнении моего решения с другим. – sevity