Задача взята с сайта e-olymp.com.
Условие
Для нумерации [latex]M[/latex] страниц книги использовали [latex]N[/latex] цифр. По заданному [latex]N[/latex] вывести [latex]M[/latex] или [latex]0[/latex], если решения не существует. Нумерация начинается с первой страницы.
Входные данные
Единственное число [latex]N[/latex]. В книге не более [latex]1001[/latex] страницы.
Выходные данные
Искомое количество страниц.
Тесты :
N | 8 | 21 | 22 | 113 | 999 | 1001 |
M | 8 | 15 | 0 | 61 | 369 | 0 |
Код программы
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
#include <iostream> using namespace std; int main() { int N; cin >> N; for (int i = 1; true; i++) // i - номер страницы, будем отнимать от N количество цифр в i { if (i < 10) // в i одна цифра N --; else if (i >= 10 && i < 100) // 2 цифры N -= 2; else if (i >= 100 && i < 1000) // 3 цифры N -= 3; else // 4 цифры N -= 4; if (N == 0) // если лишних цифр у нас не осталось { cout << i << endl; break; } else if (N < 0) // иначе выводим "0" { cout << 0 << endl; break; } } return 0; } |
Примечание
Общее (и более компактное) решение можно написать, подключив библиотеку <cmath> и воспользовавшись функцией логарифма с основанием 10.
Код программы (вторая версия)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
#include <iostream> #include <cmath> using namespace std; int main() { int N; cin >> N; for (int i = 1; true; i++) // i - номер страницы, будем отнимать от N количество цифр в i { N -= floor(log10(i) + 1); if (N == 0) // если лишних цифр у нас не осталось { cout << i << endl; break; } else if (N < 0) // иначе выводим "0" { cout << 0 << endl; break; } } return 0; } |
Ссылки
Засчитанное решение на e-olymp.com .
Рабочий код на Ideone.com .
— Как-то странно 10 раз отнимать 1 чтобы узнать, что получится. Можно ведь отнять 10. Давайте подумаем и напишем хитрое решение? Не удаляйте этот код. Просто добавьте более быстрый и лаконичный способ. Потом сравним.
— И не ставьте пробел перед двоеточием. А лучше вообще уберите двоеточие из названия. Загляните в любой учебник: названия глав и разделов разве заканчивают двоеточием?
Спасибо, исправил (добавил еще 1 версию кода)
Хорошо. Зачтено