建信金融科技2020春招笔试回忆

技术笔试,30道单选60分,5道多选10分,1道编程30分。选择考察涉及c++,Java,数据结构,软工,数据库等等。
编程题大意是m*n的格子,往格子里放点,点落在格子里就算这个格子被占领了,放在格子的任意一条边上算这条边涉及的格子被占领了,放在格子的任意一个顶角算这个角涉及的格子都被占领了。计算占领所有格子要放的点的最少的数量。例如2*2的格子,只要在正中间放一个点就能满足要求。很简单的题,但要注意细节。

因为有人问,文字描述的不清楚,画3个图示意一下,红色代表放点的位置,蓝色代表被占领的格子

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

思路是贪心,找2*2的格子,一个点就能占领,再找1*2和2*1的,都是一个就能占领,最后就剩一个1*1的格子或者没有

//代码
#include
#include
using namespace std;

int main()
{
    //freopen("input.txt", "r", stdin);
    int m, n, a, b;
    cin>>a>>b;
    m = min(a, b), n = max(a, b);
    int ans = (m / 2) * (n / 2);//2*2的数量
    int leftm =  m - (m/2) * 2, leftn =  n - (n/2) * 2;
    ans += (leftm * (n / 2) );// 1*2
    ans += (leftn * (m / 2) );// 2*1
    if(leftm & 1 && leftn & 1)ans++;// 1*1
    cout<<ans<<endl;
    return 0;
}

你可能感兴趣的:(#,面经)