题解:蓝桥云课 3404 肖恩的乘法表

【题目来源】

蓝桥云课:1.肖恩的乘法表 - 蓝桥云课 (lanqiao.cn)

【题目描述】

肖恩认为一般的乘法表不够美观,因为它是三角形的所以肖恩认为不够整齐。肖恩自己制作了一张矩形乘法表, 对于一张 \(n\times m\) 的矩形乘法表,肖恩会把 \(i\times j\) 填充到矩形的第i行第 \(j\) 列的位置。现在,肖恩向你提问:在这张乘法表中,第 \(k\) 大的元素是多少?

矩形乘法表中第 \(k\) 大元素是指将矩形乘法表中所有元素从小到大排列后的第 \(k\) 个元素。

【输入】

输入三个数字 \(n,m,k\),每个数字的意义和问题描述中相同。

【输出】

输出一个数字表示第k大的元素。

【输入样例】

2 4 5

【输出样例】

4

【算法标签】

《蓝桥云课 3404 肖恩的乘法表》 #思维# #二分#

【代码详解】

n, m, k = map(int, input().split())

#第k小在区间[1, n*m]
left, right = 1, n*m

#计算乘法矩阵中有多少个数字小于等于x
def check(x):
    cnt = 0
    for i in range(1, n+1):
        #第i行的数字为:i,2i,3i,...,mi
        #i*j<=x => j<=x//i
        cnt += min(m, x//i)
    return cnt
ans = 0
while left<=right:
    mid = (left+right) // 2
    #第k小的数字mid,在原数组中小于等于mid的数字至少有k个
    if check(mid)>=k:
        ans = mid
        right = mid - 1
    else:
        left = mid + 1
print(ans)

【运行结果】

2 4 5
4
posted @ 2026-03-04 15:11  团爸讲算法  阅读(0)  评论(0)    收藏  举报