@[TOC][搜狗校招编程题-建房子]
题目描述
某市政府规划建设一个新的小镇,要求小镇上的所有房屋都坐落在同一条东西向大姐的北侧并且临街(两座房子不能重叠)。到目前为止,这条街上已经建造了n座房子,每座房子的位置是xi,面宽是ai。建造工程师小汪受命在该镇建造一座新房子,客户希望他的新房屋面宽为t,并且至少贴着之前已有的一座房子建造。您能帮小汪算出这座房屋一共有多少种建法么?注意:xi为每座屋子的中心坐标。
示例
输入
2,[-1,4,5,2]
输出
4
说明
要创建一个房屋面宽为2的房屋,其中已有两个房屋A、B,其中A坐标为-1宽度为4,B坐标为5宽度为2,这样A占据了-3~1,B占据了4~6。因此我们能紧挨着A的东面或西面、或者B的东面或西面建造新房子,一共四种建造方法
代码1
功能实现了,测试用例也通过了,通过率40%,后面答题时间过了没有继续修改。有大佬可以指导一下问题么?具体的输入不需要我写,我只是把示例上面的输入定义了以下,功能是通过函数写进去的。
#include <iostream>
#include <vector>
using namespace std;
int t = 2; //输入面宽
int num = 2; //可建造的房子数量
int a[] = { -1,4,5,2 }; //输入其他房子的坐标和面宽
float c_max; //保存其他房子的左边坐标
float c_min; //保存其他房子的右边坐标
vector<float> b; //用于保存其他房子占的坐标范围
int main()
{
for (int i = 0; i < (sizeof(a) / sizeof(a[0])); i=i+2)
{
c_min = a[i] - (a[i + 1]/2);
b.push_back(c_min);
c_max = a[i] + (a[i + 1]/2);
b.push_back(c_max);
}
for (int j = 1; j < (sizeof(a) / sizeof(a[0]) -1); j = j + 2)
{
if ((b[j] + t) <= b[j + 1])
num++;
if ((b[j + 1] - t) > b[j])
num++;
}
cout << num;
return 0;
}