华为OD三道编程机考机试社招校招留学生笔试




限时120min的三道编程题:
1. (100分)有m个村民,获得了总额为n的捐款,数组a[1..m]是每个村民的资产金额。把捐款分配给村民,使得尽可能多的村民的资产变为相等,记此时相等的资产金额为b,资产相等的村民数为k. 如果剩余捐款不能使某村民的资产增长到b,则不分配给该村民,剩余捐款均作为公共基金。在尽可能多的村民的资产变为相等的前提下,使得公共基金尽可能少,输出此时最大相等资产的村民数k,和最少公共基金的值,用空格分隔。
a) 输入为m, n和a[1..m].
b) 已知2 <= m <= 10^4, 1 <= n <= 10^8, a[i]的范围忘了。
2. (200分)餐厅的座位分布是一个m*n的0-1矩阵,其中0表示空座位,1表示有人坐着。因疫情防控需要,要求任何两个人不能上下左右相邻地坐(可以斜着坐),输出此时还能按要求坐下的最大人数。
a) 输入为m, n和m*n的0-1矩阵。
b) 已知m, n <= 20.
3. (300分)有一张黑白二值图像,可以表示为一个m*n的0-1矩阵,其中0表示白像素点,1表示黑像素点。一个连通块指的是上下左右相邻的一整块黑色块,其大小就是其中1的个数。现在最多可以将两个0改成1,希望构成一个最大的连通块,输出这个最大连通块的大小。
a) 输入为m, n和m*n的0-1矩阵。
b) 已知m, n <= 100.
#华为编程语言#华为春招#华为笔试#华为OD#华为od测试#华为od#华为入职#华为测试工程师