google測試 最大數是幾

2021-04-02 01:09:57 字數 3007 閱讀 2580

17、有這樣乙個函式,對於任意整數n,都能返回寫出0到n之間出現「1」的個數。例如,f(13)=6。請注意f(1)=1,那麼下乙個能實現f(n)=n的最大數字是什麼?

以下為驗證**:

option explicit

private sub command1_click()

dim i as long

dim s as double

dim s2 as double

dim s1 as double

dim s3 as double

s = 0

s1 = 1

s2 = 1

s3 = 1

for i = 1 to 20

s = s + s2 * 2 + s3 * 10 + 1

debug.print i, s2, s

s2 = s3 * 10 + s2 * 10

s3 = s3 * 10

next

end sub

程式輸出結果:

1             1             13

2             20            154

3             300           1755

4             4000          19756

5             50000         219757

6             600000        2419758

7             7000000       26419759

8             80000000      286419760

9             900000000     3086419761

10            10000000000   33086419762

11            110000000000                353086419763

12            1200000000000               3753086419764

13            13000000000000              39753086419765

14            140000000000000             419753086419766

15            1.5e+15       4.41975308641977e+15

16            1.6e+16       4.64197530864198e+16

17            1.7e+17       4.8641975308642e+17

18            1.8e+18       5.08641975308642e+18

19            1.9e+19       5.30864197530864e+19

20            2e+20         5.53086419753086e+20

可以看出那個數在1000000000-2222222221之間(10位數)

'1-26補充完整

private function f(byval n as long)

static num1(9) as long '定義 num1(1)=f(1)+..+f(9),num1(2)=f(1)+...+f(99)

dim i as long, j as long

dim s as long

dim s1 as long

dim s2 as long

dim s3 as long

dim m as long

dim mmod as long

'預處理

if num1(1) = 0 then

num1(0) = 0  '0位數所含1總數為0,這個可以作為公理吧

for i = 1 to 9 '2-9位數

num1(i) = num1(i - 1) * 10 + 10 ^ (i - 1)

next

end if

s = 0

m = n

for i = 1 to 10

mmod = (m mod 10)

if mmod = 0 then

elseif mmod = 1 then

'         i-1位數總和            本位1      餘數

s = s + (m mod 10) * num1(i - 1) + 1 + ((n mod 10 ^ (i - 1)))

else

'         i-1位數總和                 餘數

s = s + (m mod 10) * num1(i - 1) + 10 ^ (i - 1)

end if

m = m / 10

if m = 0 then exit for

next i

f = s

end function

'用2分法查詢the next biggst

private function getnum() as long

dim i as long, j as long

dim high as double, low as double, mid as long

high = 2147483647

low = 1000000000

domid = (high + low) / 2

getnum = f(mid)

if getnum > mid then

high = mid

elseif getnum < mid then

low = mid

else

exit do

end if

loop

end function

用getnum可以得到那個數:1111111110

尋找最大數

描述 請在整數 n 中刪除m個數字,使得餘下的數字按原次序組成的新數最大,比如當n 92081346718538,m 10時,則新的最大數是9888 輸入 第一行輸入乙個正整數t,表示有t組測試資料 每組測試資料佔一行,每行有兩個數n,m n可能是乙個很大的整數,但其位數不超過100位,並且保證資料...

尋找最大數

時間限制 1000 ms 記憶體限制 65535 kb 難度 2 描述 請在整數 n 中刪除m個數字,使得餘下的數字按原次序組成的新數最大,比如當n 92081346718538,m 10時,則新的最大數是9888 輸入 第一行輸入乙個正整數t,表示有t組測試資料 每組測試資料佔一行,每行有兩個數n...

尋找最大數

尋找最大數 三 時間限制 1000 ms 記憶體限制 65535 kb 難度 2 描述給出乙個整數n,每次可以移動2個相鄰數字上的數字,最多移動k次,得到乙個新的整數。求這個新的整數的最大值是多少。輸入多組測試資料。每組測試資料佔一行,每行有兩個數n和k 1 n 10 18 0 k 100 輸出每組...