Консультация # 194280: Уважаемые эксперты! Пожалуйста, ответьте на вопрос: Найдите наименьшее натуральное число n, такое, что n^2 и (n+1)^2 содержат цифру 7, а (n+2)^2 не содержит....
Здравствуйте, kenguru_62! В условии задачи не предписан метод решения. Я полагаю, эту задачу проще всего решить методом простого перебора с помощью мини-программки на языке VBScript . Это - простейший язык программирования. Для его использования не нужны ни компиляция, ни установка среды программирования. Мало кто знает, что в каждой Windows-системе уже встроен обработчик VBScript , и народ "убивает время" на комп-игры по чужому сценарию вместо того, чтобы играть в мини-программки по
своему сценарию с гораздо бОльшей практической пользой.
В этом простом языке отсутствует специальная команда поиска символа в строке, поэтому, чтоб узнать наличие символа из переменной s0 в строке или слове n2 приходится использовать команду Split(n2,s0) - разрезать фразу n2 в массив фрагментом s0 . Затем функция UBound() получает верхний индекс полученного массива. Поскольку отсчёт элементов массива ведётся с "0", то UBound-значение <1 означает, что запрош
енный символ отсутствует в строке (строка НЕ разрезалась).
Условный оператор if [условие] проверяет истинность заданного условия. Если условие истинно, то выполняются команды после ключевого слова then . В противном случае выполняются команды после ключе-слова Else . Я снабдил прог-текст скрипта подробными комментариями. Обработчик прог-слов игнорирует эти комменты правее символа ['] до конца строки.
Ниже-код скрипта надо вставить в текстовый файл, сохранить его и затем переименовать
его расширение .txt на .vbs . Готовый скрипт "194280 Нал цифры 7.vbs" и скриншот его выполнения прилагаю.
s0="7" ' Задали, которую цифру искать. Вместо "7" можно задать "0", "9" и даже "Ы"
Msg="" : itog=" Решение НЕ найдено!" 'Очистили накопитель итогового сообщения.
For n0=1 to 40 'Цикл от 1 до 40 будет исполнять команды, перечисленные до слова Next .
n2=n0^2 : s2=n0 & "^2=" & n2
if UBound(Split(n2,s0))<1 then
s2=s2 & " НЕ содержит цифру " & s0 & " ."
Else s2=s2 & " содержит цифру " & s0 & " , "
n3=(n0+1)^2 : s3="(" & n0 & "+1)^2=" & n3
if UBound(Split(n3,s0))<1 then 'ниже vbLf - перенос строки с после-отступом.
s2=s2 & vbLf & " Однако, " & s3 & " НЕ содержит цифру " & s0 & " ."
Else s2=s2 & "И " & s3 & " содержит цифру " & s0 & " ."
n3=(n0+2)^2 : s3="(" & n0 & "+2)^2=" & n3
if UBound(Split(n3,s0))>0 then
s2=s2 & vbLf & " Однако, " & s3 & " содержит цифру " & s0 & " ."
Else s2=s2 & vbLf & " И " & s3 & " НЕ содержит цифру " & s0 & " !"
Msg=Msg & s2 & vbLf : itog=" Решение найдено!" : Exit For ' обрыв цикла
End if
End if
End if
Msg=Msg & s2 & vbLf
Next
WScript.Echo Msg & itog 'вывод результатов на экран.
Поскольку перебор чисел ведётся от 1 (минимального натурального числа), значит первое же найденное решение - число 27 есть "наименьшее натуральное число n", удовлетворяющее условию задачи. Эксперт kovalenina правильно решила Вашу задачу 2 дня назад.
Вы можете из контекстного меню скрипта выбрать команду
"Изменить". Код скрипта откроется в текстовом редакторе "Блокнот". Поиграйте присвоением, замените s0="7" на s0="0" , или на s0="9" чтоб задать другую цифру для поиска.
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались.
Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора -
для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение.
Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал,
который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом.
Заходите - у нас интересно!