度度熊和爺爺在玩乙個乘法表遊戲。乘法表的第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...