Serey is utilizing Blockchain technology

11 FreeBASIC - решаем задачи

F

freebs

Некоторые задачи бывает проще решить на компьютере методом грубой силы. Метод грубой силы или метод полного перебора это метод решения задачи путем перебора всех возможных вариантов. Помню случай в школе когда я после решения задачи на олимпиаде по математике решил проверить своё решение на компьютере. Задача была из класса - найти все ..значные числа у которых... Деталей я уж не помню. Вот сегодня и займёмся решением таких задач. ![](https://serey.io/imageupload_data/53214c166c4d021ec329cd20482b4cbe769a1d60) # Найти все трёхзначные числа - палиндромы Палиндром - это число(слово) которое читается одинаково как справа налево и слева направо. "121", "ABBA", "1001", "или". `for i=100 to 999` - перебор **всех** трехзначных чисел. среди трёхзначных чисел палиндром это если первая и последняя(третья) цифры числа равны `if (int(i/100)==i mod 10) then print i;` вот и всё)) ![](https://i.imgur.com/tb2ADJu.png) # В трехзначном числе зачеркнули среднюю цифру. Полученное двузначное число оказалось в 6 раз меньше исходного. Найти такое трехзначное число Решение этой задачи будет отличаться от предыдущей лишь условием в операторе **if**, а чтобы не делать его очень сложным введём ещё одну переменную (для двухзначного числа составленного из трёхзначного) `t=(i\100)*10 + (i mod 10)` `if t*6=i then print i;` ![](https://i.imgur.com/JS2x2vU.png) Выходит что такое число лишь одно - 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;` ![](https://i.imgur.com/CW6MkAu.png) # Найти все трёхзначные числа у которых нет одинаковых цифр используем текст предыдущих программ введём переменные 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;` ![](https://i.imgur.com/5lqPlLf.png) Ну и какой же программист не изменит условие задачи и не решит её иную версию...))) не захотелось изменить? значит ещё не программист))) # Найти все трёхзначные числа у которых ЕСТЬ одинаковые цифры(только две) измениться лишь условие в операторе **if** `if (t1=t2 AND t1<>t3) OR (t1=t3 AND t1<>t2) OR (t2=t3 AND t1<>t2) then print i;` ![](https://i.imgur.com/GWSabLe.png) слишком длинное условие мжно перенести на следующую строку исспользуя знак подчёркивания `_` 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;` ### Решите задачи Найти все трехзначные числа Армстронга(числа, равные сумме кубов своих цифр) Найдите все трехзначные числа, первая цифра которых равна разности второй и третьей цифр Найдите все трехзначные числа, средняя цифра которых равна сумме первой и третьей цифр
0.000 SRY$0.00
Global
Global

Comments