- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
#include <stdio.h>
unsigned int mid (unsigned int a, unsigned int b)
{
if (a > b) {unsigned int c = a; a = b; b = c;}
for(; a < b; a--, b++) {;};
return a;
}
int main(void) {
printf("%u %u %u %u", mid(2,2), mid(3,2), mid(2,3), mid(3,3));
return 0;
}
Но почему на нём написано wvxvw?
Он ведь не пишет на чем угодно, но не на крестах. Да и вообще где здесь С++?
Как где? Вон же + из жопы изображенного на портрете торчит, остальные символы, видимо, внутри.
> Но почему на нём написано wvxvw?
Это волосы. Они даже другим цветом выделены.
Но не парься, нормальный компилятор сможет выпилить твой "way of thinking" и оставить пару команд.
Нет. Оно именно не ту середину ищет. Если представить unsigned числа как окружность (а из-за переполнения это именно окружность, а не луч), а входные данные - как две точки на ней, то мы получим как раз 2 "середины". Этот код выбирает ту, которая на дуге (b, a) (что кажется странным), а исправленный - на дуге (a, b) (что вполне интуитивно).
А то, что в целых числах не найти середину между 2 и 3 вполне решается округлением по одному из правил. В случае с for(; a < b; a++, b--); return a; - в большую сторону.
https://www.youtube.com/watch?v=mqAf5lOJZew