примитивные типы, в том числе:
логический тип
целые типы
вещественные типы
ссылочные типы
опциональные типы
обнуляемые типы
Композитные типы, в том числе:
массивы
записи
кортежи
абстрактные типы (АТД, англ. ADT)
алгебраические типы
вариантные типы
подтипы
унаследованные типы
объектные типы, то есть объекты, значением которых являются типы — например, переменные типов
частичные типы
рекурсивные типы
функциональные типы, например бинарные функции
универсально квантифицированные типы, такие как параметрические типы
экзистенциально квантифицированные, такие как модули
зависимые типы — типы, зависящие от термов (значений)
уточняющие типы — типы, идентифицирующие подмножества других типов
Предопределённые типы (являющиеся фактически структурными, но предоставляемые на правах примитивных) для удобства промышленных разработок, такие как «дата», «время», «валюта» и др.
1) 33 ⇒ 333311
2) 333311 ⇒ 333311113333111111
3) 333311113333111111 ⇒ 333311113333111111111111333311113333
Заметим, что в исходном числе все цифры нечетные и после любого приписывания все цифры будут нечетными (т.к. 1 - нечетна)
Т.е. при каждой работе алгоритма длин числа будет увеличиваться в три раза (само число, перевернутое и единицы по длине равные самому числу).
Соответственно после третьего применения алгоритма длина числа будет: 2 * 3 * 3 * 3 = 54
Выясним сколько среди них будет единиц. При каждом применении алгоритма количество троек будет увеличиваться в два раза (тройки самого числа и перевернутого).
Значит троек в конце будет: 2 * 2 * 2 * 2 = 16
Соответственно единиц будет 54 - 16 = 38
===== С++ 17 =====
#include <iostream>
using namespace std;
int main()
{
int n = 7, min = 100, max = -100, s = 0;
int T[n];
for(int i = 0; i < n; i++)
{
cin >> T[i];
s += T[i];
if(T[i] > max)
max = T[i];
else if(T[i] < min)
min = T[i];
}
double avg = (double)s / n;
cout<< "min = " << min << ", max = " << max << ", среднее = " << avg;
return 0;
}