Чтобы пронумеровать страницы книги было использовано n цифр. Найдите количество страниц...

0 голосов
136 просмотров

Чтобы пронумеровать страницы книги было использовано n цифр. Найдите количество страниц книги. Нужна формула для всех n

к примеру было использовано 13 цифр , а страниц оказалось 11
или
21 цифр , 15 страниц


Математика (18 баллов) | 136 просмотров
0

Это всё условие?

0

da

Дан 1 ответ
0 голосов

Можно с начало определить в какой разряд (однозначное,двузначное,трехзначное итд) принадлежит данное число по количеству цифр n. 
Очевидно n это непроизвольное число, так как цифры образуют разряд числа. 
 
Для чисел 1 до 99  всего от 1 до 189 цифр (9+2*90=189) цифр, страницу можно найти по формуле  (n-9)/2+9 = (n+9)/2 

Для чисел от 100 до 999 всего от 189+3 до 189+3*900=2889 цифр, страницу можно найти по формуле (n-189)/3+99 = (n+108)/3   
 
Для чисел от 1000 до 9999 всего от 2889+4 до 2889+4*9000=38889  страницу можно найти по формуле (n-2889)/4+999 = (n+1107)/4  

итд то есть реккурентная формула будет иметь вид, для k-разряда 
S=(n-(9+2*90+3*900+4*9000+...))/k+(10^(k-1)-1)  = 
 (n-9(1+20+300+4000+...))/k+(10^(k-1)-1)  

 Найдем сумму 1+20+300+4000+.... = 1+2*10+3*10^2+4*100^3=1+2x+3x^2+4x^3+5x^4...+y*x^(y-1)  тогда рассмотрим сумму функцию 
 x+x^2+x^3+x^4...+x^y ее производная x+2x+3x^2+4x^2+...+yx^(y-1) значит найдя сумму x+x^2+x^3+...+x^y=(x^y-1)/(x-1) (геометрическая прогрессия) 
Найдя ((x^y-1)/(x-1))' и заменяя x=10 и y=k+1 
Получаем (10^k*(9*k-1)+1)/81 то есть сумма 1+2*10+3*10^2+4*100^3+... вычисляется по формуле (10^k*(9*k-1)+1)/81  
Подставляя в
 S=\frac{n-\frac{10^k \cdot (9k-1)+1}{9}}{k}+(10^{k-1}-1) = \\
 S = \frac{9n+10^k-9k-1}{9k}\\
 


То есть к примеру для n=13 получаем k=2 то есть (двузначное число) 
откуда S=(9*13+10^2-9*2-1)/18 = 11 страниц  
Для n=21 получаем k=2 подставляя S=(9*21+10^2-9*2-1)/(18)=15 страниц 

Как определить можно по оценке, то есть исходя из того какое n , допустим для двузначных чисел количество цифр от 1 до 189 цифр итд 

(224k баллов)
0

#include
#include
using namespace std;
int sum ( int n ) {
if ( n / 10 != 0 ) {
return n % 10 + sum ( n / 10 ) ;
}
else {
return n % 10 ;
}
}
int main () {
int j = 10 ;
long long n , x ;
cin >> n >> x ;
for ( int i = 1 ; i < n ; i++ ) {
j *= 10 ;
}
cout << sum ( j-x ) ; <br>}

0

случайно , не обращай внимания

0

Да скорее всего это задача на программирование