百度 乘法表

2021-08-28 13:45:24 字數 1069 閱讀 3607

度度熊和爺爺在玩乙個乘法表遊戲。乘法表的第i行第j列位置的元素為i*j,並且乘法表下標編號從1開始,比如2 × 3乘法表為

1 2 3

2 4 6

爺爺十分聰明,對於n*m的乘法表,只要度度熊給出乙個數k,爺爺就能立刻告訴度度熊乘法表中元素按照不減順序排列之後,第k個元素是多少。你能重複這個遊戲嗎?

輸入輸入資料是三個整數:n, m, k (1≤n, m≤5*105, 1≤k≤nm)。

樣例輸入

2 3 4

輸出輸出n*m乘法表按照不減順序排列的第k個數。

樣例輸出

3時間限制

c/c++語言:1000ms其它語言:3000ms

記憶體限制

c/c++語言:65536kb其它語言:589824kb

首先分析這道題目,根據這個乘法表,比如乘法表

1 2 3 4 5 6

2 4 6 8 10 12

3 6 9 12 15 18

比如小於等於12的數的個數就是6+12/2+…12/3=16個,因此對於任意乙個數,我們可以很容易分析在乘法表中小於等於該數的數的個數,這樣我們就可以用二分查詢了。

但是有一點要注意的是,這個裡面的數是有重複的,並不能直接用那種最原始的二分法查詢,要有一些小的改進,比如上面這個表中小於等於12的數有16個,而要找第15個數,按照一般二分查詢,又要在小於12的數裡面找了,顯然不對,可以加乙個限制條件,比如小於等於12的數有16個,在判斷小於等於11的數有多少個?若小於15,則這個數就是12。

#includeusing namespace std;

typedef long long int64;

int64 getsum(int64 k,int64 n,int64 m) //返回小於等於k的元素的個數

return sum;

}int64 binarysearch(int64 n,int64 m,int64 k,int64 low,int64 high)

return 0;

}---------------------

百度面試題 乘法表

這道題簡要題目如下 乘法表第i行第j列位置的元素為i j,並且乘法表下表編號從1開始,比如2 3乘法表為 1 2 3 2 4 6 那麼對於n m的乘法表按照不減順序排列之後,求第k個元素的值是多少?看到這個題,大多數同學想到的肯定是得到這個乘法表的數值,然後進行排序,從而得到k的值,這樣做的確沒問題...

2016百度實習機試題 乘法表

題目鏈結 題目描述 度度熊和爺爺在玩乙個乘法表遊戲。乘法表的第i行第j列位置的元素為i j,並且乘法表下標編號從1開始,比如2 3乘法表為 1 2 3 2 4 6 爺爺十分聰明,對於n m的乘法表,只要度度熊給出乙個數k,爺爺就能立刻告訴度度熊乘法表中元素按照不減順序排列之後,第k個元素是多少。你能...

乘法表問題

include iostream include algorithm include fstream using namespace std f i j 0 表示在ch i ch j 之間以某種方式加括號後,結果為a f i j 1 表示在ch i ch j 之間以某種方式加括號後,結果為b f i...