Дано натуральное число n. Среди чисел 1,2.. n найтивсе такие, запись которых совпадает с последними цифрами записи их квадрата ( например 6 в квадрате = 36 или 25 в квадрате = 625) Заранее спасибо:)
В общем обрати внимание, что число должно совпадать с последними цифрами своего квадрата... Такая тема наблюдается тока для чисел, заканчивающихся на 0, 1, 5, 6. Значит перебирать можно тока числа, оканчивающиеся на эти...
Цикл от 1 до Н (счетчик К) Если К not in [0,1,5,6] то Continue; X := K * K; Переводишь K и X в строки (см процедуру Str) Сравниваешь строку X со строкой K с конца. Если равно, то вывод на экран. Конец цикла
Добавлено (20.02.2008, 23:33) --------------------------------------------- извините за наглость, а не можете написать весь текст проги, чтоб её сразу можно было в паскаль засунуть.... а то у меня что то не сильно идет... заранее спасибо
Замечание к циклу: при К>=10 проверка K not in [0,1,5,6] будет всегда возвращать false. Надо сравнивать К mod 10 с этим множеством. Предлагаю следующий код (без преобразования в строчку, поэтому ограничение на кол-во знаков n более узкое): program printnums; var k:byte; i,t,n,j,r:longint; begin writeln ('enter n'); readln (n); for i:=1 to n do begin if (i mod 10) in [0,1,5,6] then begin j:=i; k:=1; r:=1; while (j div 10<>0) do begin j:=j div 10; inc(k); end; for j:=1 to k do r:=r*10; t:=sqr(i) mod r; if i=t then writeln (i); end; end; end.
Такая тема наблюдается тока для чисел, заканчивающихся на 0, 1, 5, 6.
А нуль почему? Если мы умножаем два числа, заканчивающиеся n-нулями и не равные нулю, то в результате получим число, как минимум на n порядков большее, чем любое из них и оканчивающееся n*2 нулями. Более того, единица тоже из другой оперы. Доказательство: При умножении числа, которое заканчивается на единицу и не равно ей, самого на себя, мы получаем такую картину:
А по условию вторая с конца цифра результата должна быть равна соответствующей цифре исходного числа. Т.е. вторая цифра умноженная на 2, должна дать число, которое заканчивается на эту цифру! А теперь бежим к таблице умножения на 2 и убеждаемся, что это возможно только при умножении на нуль. В этом случае(x_1=0) аналогичное условие(2*x_n mod 10=x_n). Но при встрече первой значащей цифры(не нуль) мы увидим, что это условие не выполняется, а значащую цифру мы должны встретить по условию(число не равно единице) ч.т.д. etc, Seqular был абсолютно прав, предлагая работать со строками, а ваш вариант и сложен и расточителен. Скажем дружно- нафиг нужно!
Сообщение отредактировал Alexander - Среда, 19.03.2008, 05:51
Quote проверять остаток от деления на 10 с множеством (1, 5, 6, 0)
не (1,5,6,0), а (5,6)!
а ну да. 11^2 = 121 Не подумал. Надо еще раз глянуть. Будет. Тут собсна на внимание. У нас как-то задачка была. На первый взгляд ужасно сложная с возможным перебором миллионов вариантов. А оказалось решение всего в одной строке после отсечения лишних вариантов.
А я за то, чтобы брать 1-цу.. Ну или хотябы проверить, не является ли n единице... Потому что 1 * 1 = 1. =) Поддерживаю также проект сообщество молодых сисадминов
Alexander, О да... извиняюсь =) я вообще читал не пост целиком, а лишь его части =) собсна, я так со школы читаю... по паре букв из каждого слова... поэтому билеты по Автоделу частенько заваливаю... Гг. Фигасе, пролетел =)) конечно, идиницу фтопку Поддерживаю также проект сообщество молодых сисадминов