Напишите программу которая запрашивает на вход натуральное число и определяет, сколько раз в его записи встречается цифра 3. P.s Похожая программа была для единицы, но я не понимаю, как преобразовать ее для 3. Объясните пожалуйста алгоритм. Спасибо
LRSM
А как же на счёт "Объясните пожалуйста алгоритм"? И что это за прикол с input? Ладно ещё на count c output можно хоть и со скрипом, но закрыть глаза, но зачем в m_count городить огород с if then begin exit end? Ну как можно знать split и при этом не знать о существовании "волшебного" else? Ого, так ещё и .Println при всём при этом используется??! Ну это уже смешно тогда как-то получается...
Jurin
Cпасибо. Все работает. А как это будет выглядить для Python? Cпасибо
LRSM
n = int(input("Введите натуральное число: ")) print("Результат:", str(n).count("3"))
или можно для любой строки, необязательно числа: print("Результат:", input().count("3"))
MrSolution
LRSM, count принимается без скрипа. Это правильная четкая логика и оптимальное решение задачи на уровне ученика школы. Смешного ничего нет. Решение такое, какое оно есть специально. Приведено грамотное решение задачи (функция count). Однако, если человек хочет списать, то получит от учителя 2, а если разобраться (а Jurin именно этого и хочет), то поймет, что ему нужно брать. Else знаю, не волнуйтесь за меня. Input и output добавил просто так. Мне захотелось.
MrSolution
Сначала думал проверку на корректность ввода написать, но потом стало лень. Поэтому не ищите там глубокого смысла. Ваше решение на python получит, если не 0, то мало баллов, так как не показывает проверяющему то, что вы понимаете, как реализована идея. Именно поэтому, кстати, на ЕГЭ очень не любят питон.
LRSM
Использование Println и Split явно указывает на PascalABC.NET, однако вместо того, чтобы написать грамотное решение на нём, Вы начинаете лепить туда лишний "хлам": создаёте ненужную процедуру input (ну ок, от балды захотелось), в ней создаёте лишнюю переменную (ну ок, захотелось растянуть код и его компиляцию); знаете exit - молодцы, но в m_count это в ущерб читабельности. В итоге у Вас получилась программа написанная ни на том, ни на сём: то ли PascalABC.NET, то ли Turbo/Free/Delphi/... .
LRSM
Если собрались написать решение на Turbo/Free/Delphi - пожалуйста, убирайте .Println и др., к count нареканий нет. Если всё же решили писать на PascalABC.NET, но считаете, что решение BobbyFresnel не для школьников - пожалуйста, вот один из множества альтернатив (и да, в школах, где изучают PascalABC.NET, это проходят): begin var (a, c) := (ReadInt64, 0); foreach var i in a.ToString do if i.ToDigit = 3 then c+=1; write(c) end.
LRSM
В проверке на корректность ввода ничего сложного нет - TryRead(n) и n>0.
Answers & Comments
Программа:
(см. прикрепленный файл)
print("Результат:", str(n).count("3"))
или можно для любой строки, необязательно числа:
print("Результат:", input().count("3"))
begin
var (a, c) := (ReadInt64, 0);
foreach var i in a.ToString do
if i.ToDigit = 3 then c+=1;
write(c)
end.
// PascalABC.NET 3.6
begin
ReadInt64('Введи натуральное число:').ToString.Count(c -> c = '3').Print
end.
Объяснение:
ReadInt64('Введи натуральное число:') - запрос ввода целого числа длиной до 19 цифр
.ToString - преобразование числа в строку символов
.Count(c -> c = '3') - подсчет символов '3' в строке
.Print - вывод результата