Собирали ракушки . -дай мне одну, и у нас будет поровну! , - сказал один. - если ты дашь мне одну у меня будет в двое больше, - сказал второй. сколько было ракушек?
Var n, i, m: longint; s1, s2: string; l1: integer; begin write('введите натуральное число: '); readln(n); writeln('автоморфные числа: '); for i : = 1 to n do begin m : = sqr(i); str(i, s1); l1 : = length(s1); str(m, s2); if s1 = copy(s2, length(s2) - l1 + 1, l1) then writeln(i) end end. тестовое решение: введите натуральное число: 10000 автоморфные числа: 1 5 6 25 76 376 625 9376
samuilik-v
11.02.2023
1. восьмеричное число записываем двоичными (с конца по 3 разряда), заменяя каждую 8-ю цифру двоичной триадой, потом записываем двоичными (с конца по 4 разряда) и каждую тетраду заменяем 16-й цифрой. 754(8) = 111 101 100 (2) = 1 1110 1100 (2) = 1ec (16) ответ 3) 2. ответы даны в двоичной системе, в нее все и переводим. a = 9d(16) = 1001 1101(2); b = 237(8) = 10 011 111 (2) = 1001 1111(2) неравенство записано словами как-то странно. если подразумевалось a< c< b, то ответ 1001 1110, т.е. 2) а если a< c и a< b, то ответы 2), 3), 4), поэтому наверно все же условие было a< c< b. 3. тут все так же. a = f7(16) = 1111 0111 (2); b = 371(8) = 11 111 001(2) - 1111 1001(2) неравенству a< c< b удовлетворяет ответ 4) 4. поскольку кроме "удобных" для сравнения систем по основанию 16,8,2 есть число в десятичной системе, переведем все числа в 16-ю - это наиболее быстро (минимум делений). 347(8) = 11 100 111(2)= 1110 0111(2)=e7(16); 1110 0101(2) = e5(16); 232(10)/16 = 14, остаток 8 -> 232(10) = e8(16) сравниваем e6, e7, e5, e8: наименьшее e5, т.е. 11100101(2) 5. аналогичное решение. 234(8) = 10 011 100(2) = 1001 1100(2) = 9c(16); 1001 1010(2) = 9a(16); 153(10)/16=9, остаток 9 -> 153(10) = 99(16) сравниваем 9b, 9c, 9a, 99: наибольшее 9с, т.е. 234(8)