Задача о монетках

Следующай задача из серии: сложно изложена, просто решается. Вот условия задачи:

/**
 * На столе лежат n монеток.
 * Некоторые из них лежат вверх решкой, а некоторые – гербом.
 * Определите минимальное число монеток, которые нужно перевернуть,
 * чтобы все монетки были повернуты вверх одной и той же стороной.
 *
 * Входные данные
 * В первой строке входного файла INPUT.TXT записано натуральное число N (1 <= N <= 100) – число монеток.
 * В каждой из последующих N строк содержится одно целое число – 1 если монетка лежит решкой вверх и 0 если вверх гербом.
 *
 * Выходные данные
 * В выходной файл OUTPUT.TXT выведите минимальное количество монет, которые нужно перевернуть.
 */

Не будем пытаться предугадать кто как решал бы эту задачу, но ее суть заключается в выявлении минимума из двух целых чисел. Эти два числа мы получаем, считая количество 1 и 0. Если в итоге количество 1 меньше, чем 0, то переворачиваем те, которые лежат вверх решкой. Иначе - гербом.

Перейдем к решению самой задачи:

#include <iostream>

int main(){
	int a, f, b=0, c=0;
// сначала получим общее количество монет
	std::cin >> a;

// в цикле получаем 0 или 1
	for (int i = 0; i < a; ++i){
		std::cin >> f;
// если 1 ( преобразуется в true, если вы помните ), то b увеличиваем на 1, 
// иначе c увеличиваем на 1
		f ? b++ : c++;
	}
// сравниваем количество монет ( b с c ) и выводим минимум
	b > c ? std::cout << c : std::cout << b;
	return 0;
}