// prog1.cpp: определяет точку входа для консольного приложения.//// 1 Найдите все трехзначные числа, равные среднему арифметическому чисел,// полученных из каждого такого числа всеми перестановками (включая// тождественные) его цифр.#include "stdafx.h"// В структуре 3 числа - первая вторая и третья цифрыstruct digits3{ unsigned char a[3];};// Функция разбивает число value на цифры и помещает всё в структуруdigits3 value_to_digits (int value){ digits3 a; a.a[0] = value / 100; a.a[1] = (value % 100) / 10; a.a[2] = value % 10; return a;}// Функция получает из 3 цифр одно числоint digits_to_value (unsigned char a, unsigned char b, unsigned char c){ return c + b*10 + a*100;}int _tmain(int argc, _TCHAR* argv[]){ setlocale(LC_ALL,"RUSSIAN"); // Иначе не будет русского языка о_О int count = 0; for (int i = 100; i < 1000; i++) { digits3 i3 = value_to_digits(i); int summ = 0; // Для среднего арифметического получаем сумму всех перестановок // Количество всех возможных перестановок постоянно и равно 3! тоесть 6 summ += i; summ += digits_to_value(i3.a[1], i3.a[3], i3.a[2]); summ += digits_to_value(i3.a[2], i3.a[3], i3.a[1]); summ += digits_to_value(i3.a[2], i3.a[1], i3.a[3]); summ += digits_to_value(i3.a[3], i3.a[1], i3.a[2]); summ += digits_to_value(i3.a[3], i3.a[2], i3.a[1]); // Если будем делить на 6 для получения среднего арифметического то получим // погрешность либо при переводе в double либо при округлении до целого // Лучше i умножить на 6 и сравнить так if (i*6 == summ) { _tprintf(_T("%5d"), i); count++; if ((count) % 16 == 0) _tprintf(_T("\n")); } } return 0;}