11 FreeBASIC - решаем задачи
Некоторые задачи бывает проще решить на компьютере методом грубой силы. Метод грубой силы или метод полного перебора это метод решения задачи путем перебора всех возможных вариантов. Помню случай в школе когда я после решения задачи на олимпиаде по математике решил проверить своё решение на компьютере. Задача была из класса - найти все ..значные числа у которых... Деталей я уж не помню. Вот сегодня и займёмся решением таких задач.

# Найти все трёхзначные числа - палиндромы
Палиндром - это число(слово) которое читается одинаково как справа налево и слева направо. "121", "ABBA", "1001", "или".
`for i=100 to 999` - перебор **всех** трехзначных чисел.
среди трёхзначных чисел палиндром это если первая и последняя(третья) цифры числа равны
`if (int(i/100)==i mod 10) then print i;`
вот и всё))

# В трехзначном числе зачеркнули среднюю цифру. Полученное двузначное число оказалось в 6 раз меньше исходного. Найти такое трехзначное число
Решение этой задачи будет отличаться от предыдущей лишь условием в операторе **if**, а чтобы не делать его очень сложным введём ещё одну переменную (для двухзначного числа составленного из трёхзначного)
`t=(i\100)*10 + (i mod 10)`
`if t*6=i then print i;`

Выходит что такое число лишь одно - 108. Проверим 108=18*6
# Какое трехзначное число равно кубу цифры его единиц, а также квадрату числа, составленного из его второй и первой цифры?
используем текст предыдущих программ
Введём в программу такие переменные:
e3 - куб цифры единиц числа;
vp2 - квадрат числа составленного из его второй и первой цифр.
`e3= i mod 10: e3=e3*e3*e3`
`vp2=((i \ 10) mod 10)*10 + i\100`
теперь запишем условие - число(i) должно быть равно и e3 и vp2
`if i=e3 and i=vp2 then print i;`

# Найти все трёхзначные числа у которых нет одинаковых цифр
используем текст предыдущих программ
введём переменные t1 - первая цифра, t2 - вторая цифра и t3 - третья цифра числа
`t1= i\100`
`t2=(i\10) mod 10`
`t3=i mod 10`
`if t1<>t2 and t1<>t3 and t2<>t3 then print i;`

Ну и какой же программист не изменит условие задачи и не решит её иную версию...))) не захотелось изменить? значит ещё не программист)))
# Найти все трёхзначные числа у которых ЕСТЬ одинаковые цифры(только две)
измениться лишь условие в операторе **if**
`if (t1=t2 AND t1<>t3) OR (t1=t3 AND t1<>t2) OR (t2=t3 AND t1<>t2) then print i;`

слишком длинное условие мжно перенести на следующую строку исспользуя знак подчёркивания `_`
AND - логическое умножение имеет более всокий приоритет над OR, значит вычислится раньше OR и скобки не нужны. я их поставил для того чтобы подчеркнуть что условия три.
`if t1=t2 AND t1<>t3 OR t1=t3 AND t1<>t2 OR t2=t3 AND t1<>t2 then print i;`
А можно было всё это расписать на три оператора **if**
`if t1=t2 AND t1<>t3 then print i;`
`if t1=t3 AND t1<>t2 then print i;`
`if t2=t3 AND t1<>t2 then print i;`
Этот вариант более лёгок как для начинающих, ну а для компьютера чреват лишними действиями. Например если первый оператор **if** сработал - второй и третий проверять уже не стоит, а компьютер их проверит)))
Ну а если сделать условие задачи не таким строгим и убрать требование "только две" тогда смягчится и условие в **if** - исчезнет проверка на неравенство и опреатор будет выглядеть так:
`if t1=t2 OR t1=t3 OR t2=t3 AND t1<>t2 then print i;`
### Решите задачи
Найти все трехзначные числа Армстронга(числа, равные сумме кубов своих цифр)
Найдите все трехзначные числа, первая цифра которых равна разности второй и третьей цифр
Найдите все трехзначные числа, средняя цифра которых равна сумме первой и третьей цифр
Comments