搜狗校招编程题-建房子

@[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;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值