題目描述
度度熊和爺爺在玩一個乘法表游戲。乘法表的第i行第j列位置的元素為ij,并且乘法表下標(biāo)編號從1開始畜隶,比如2?×?3乘法表為
1 2 3
2 4 6
爺爺十分聰明,對于nm的乘法表割岛,只要度度熊給出一個數(shù)k,爺爺就能立刻告訴度度熊乘法表中元素按照不減順序排列之后犯助,第k個元素是多少癣漆。你能重復(fù)這個游戲嗎?
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
while(scan.hasNextLong()){
long n = scan.nextLong(); //行
long m = scan.nextLong(); //列
long k =scan.nextLong();
long left = 1;
long right =m*n;
long mid = right/2;
while (left <= right){
mid = (left+right)/2;
long count = 0;
//這個題目的關(guān)鍵是二分查找法剂买,首先確定中間值的位置惠爽,
//如果中間值位置大于等于要查找的K的位置,則把右邊位置放到中間值瞬哼;否則左邊位置為中間值
for(int i=1;i<=n;i++){
long tmp = (mid >= i*m)?m:mid/i;
count +=tmp;
}
if(count < k){
left = mid+1;
}else{
right = mid-1;
}
}
System.out.println(left);
}
}
}