В городе N есть большой склад на котором существует 50000 различных полок. Для удобства работников руководство склада решило заказать для каждой полки табличку с номером от 00001 до 50000 в местной типографии, но когда таблички напечатали, оказалось что печатный станок из-за неисправности не печатал цифру 2, поэтому все таблички, в номерах которых содержалась одна или более двойка (например, 00002 или 20202) — надо перепечатывать. Напишите программу, которая подсчитает сколько всего таких ошибочных табличек оказалось в бракованной партии.
Мой код
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
setlocale(LC_ALL, "Russian");
int num = 0, rez = 0, i1 = 0;
for (int i = 1; i < 50000; i++)
{
num = i;
while (num > 0)
{
if (num % 2 == 0)
{
++rez;
break;
}
num /= 10;
}
}
cout << rez << "\n";`
system("pause");
return 0;
}
Я нахожу только четные числа. Подскажите, как определить, есть ли в числе двойка.
Найдем общее количество чисел, которые кончаются на 2. В общем случае это n/10, здесь 5000. Отбросим эти числа, останется 45000, причем у каждых 9 первые 4 цифры одинаковые. Получим рекуррентную формулу f(n)=n/10+9*f(n/10) Причем для однозначных чисел, например 5, f(5)=1 Написать такую программу очень просто, и работает быстро. Ответ должен получится 23756.
int tab(int n)
{
if( n>=2 && n<10) return 1;
return n /10+9*f(n/10);
}
if (num % 2 == 0)
{
++rez;
break;
}
Так как Вы проверяте не является ли цифра цифрой 2, а четное ли само число, Ваш код не работает. Замените на
if (num % 10 == 2)
{
++rez;
break;
}
Такой вариант кода полностью рабочий, но не оптимальный для больших num. Есть более быстрые способы считать кол-во таких чисел, но это совсем другая история.
Решение не верно, то что число делится на 2 не означает, что 2 – его последняя цифра.
#include <iostream>
#include <cmath>
using namespace std;
int main(){
setlocale(LC_ALL, "Russian");
int num = 0, rez = 0, i1 = 0, cipher=0;
for (int i = 1; i < 50000; i++){
num = i;
while (num > 0){
cipher = num % 10; //получаем последнюю цифру числа
if (cipher == 2){
++rez;
break;
}
num /= 10; //отбрасываем последнюю цифру числа
}
}
cout << rez << "\n";
system("pause");
return 0;
}
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники