8 000 000 = 800 000×10¹ = 80 000×10² = 8 000×10³ = 800×10⁴ = 80×10⁵ = 8×10⁶ = 0,8×10⁷ = 0,08×10⁸ = ... Любая из записей, содержащих множитель в виде степени десятки - это экспоненциальное представление числа. В языках программирования часть такой записи, а именно ×10, обозначают буквой e или E. Тогда запись 8×10⁶ принимает вид 8e+6 (или 8е6). Для представления числа в компьютере с максимальной точностью число приводят к нормализованному виду, выбирая степень десятки так, чтобы мантисса числа (то, что стоит перед ×10) находилась по абсолютной величине между 0 и 1. Тогда ответом может быть 0.8e7 (или 0.8e+7). Но в текстах программ нормализация не нужна и там подходит любая запись - и 800е4, и 0.0008е10
// PascalABC.NET 3.2, сборка 1439 от 09.05.2017 // Внимание! Если программа не работает, обновите версию!
begin ReadlnString.MatchValues('\d+').Select(w->(w,w.Distinct .OrderBy(c->c).JoinIntoString(''))).GroupBy(t->t[1]) .Where(x->x.Count>1).Select(x->x.UnZipTuple.Item1. Select(x->x.ToInteger).Average).Println; end.
Пример это 3242 такая 181 вот 346 странная 432 1118 строка 1837 649.5
Как все это работает (функциональное программирование)
ReadlnString - считываем строку с клавиатуры
.MatchValues('\d+') - выбираем подстроки символов, состоящие из цифр
.Select(w->(w,w.Distinct.OrderBy(c->c).JoinIntoString(''))) - эта сложная конструкция сначала в каждой подстроке оставляет только разные цифры и сортирует их в порядке возрастания, затем соединяет эти цифры в строку и объединяет исходную подстроку с полученной строкой в так называемый кортеж. Полученный кортеж для каждой исходной подстроки содержит два элемента: саму подстроку и строку из уникальных цифр этой подстроки, расположенных по возрастанию.
.GroupBy(t->t[1]) - группирует кортежи в более крупные блоки так, чтобы каждый блок содержал кортежи, у которых второй элемент одинаков.
.Where(x->x.Count>1) - оставляет только те блоки, в которых больше одного кортежа, ведь нам не нужны "числа-одиночки"
.Select(x->x.UnZipTuple.Item1 - техническая операция, превращающая в каждом блоке кортеж в последовательность подстрок, представляющих исходные числа
.Select(x->x.ToInteger) - каждая такая последовательность подстрок превращается в последовательность целых чисел
.Average) - находятся средние арифметические каждой последовательности
.Println - вывод всех найденных значений.
Все это не так уж просто, но и задание далеко не тривиальное. Если записать его средствами "традиционного паскаля" - такого примерно, как Free Pascal, код будет огромным...
Задание 3.
1110111₂ = 1∙2⁶+1∙2⁵+1∙2⁴+0∙2³+1∙2²+1∙2¹+1∙2⁰ = 64+32+16+0+4+2+1 = 119₁₀
43₈ = 4∙8¹+3∙8⁰ = 32+3 = 35₁₀
119+35=154
Переводим в шестеричную:
154/6= 25 и остаток 4
25/6= 4 и остаток 1
154₁₀ = 414₆
ответ: 414₆
Задание 4.
26/2=13 и остаток 0
13/2=6 и остаток 1
6/2=3 и остаток 0
3/2 = 1 и остаток 1
26₁₀=11010₂
ответ: 11010₂
Задание 5.
163₇= 1∙7²+6∙7¹+3∙7⁰ = 49+42+3 = 94₁₀
ответ: 94₁₀
Объяснение: