小米2015校园招聘西安站
来源:互联网 发布:苏东坡美食家知乎 编辑:程序博客网 时间:2024/06/11 09:48
题目要求:
一条直线上有N条线段,已知它们的两个端点,请完成以下代码(两种语言任挑其一),计算这些线段共覆盖了多大的长度(被多条线段覆盖的部分职能计算一次)。
Segment:{[1,9],[5,10]} Sum = 9;
Segment:{[1,3],[10,15]} Sum = 7;
Segment:{[1,3],[2,5],[10,15]} Sum = 9;
C/C++
struct Segment
{
int start;
int end;
}
int Sum(int n,Segment * segments) // n是segments包含的元素个数
还有Java语言,我在这里使用C++所以就不写其组成了。
实现代码:
#include <iostream>using namespace std;struct Segment{int start;int end;Segment()//Segment 的默认构造函数{}};int Sum(int n, Segment* segments){int i = 1;int sum = 0;for (i = 1; i < n; i++)//将其全部循环一遍{if ((segments[i].end < segments[i - 1].end) && (segments[i].start > segments[i - 1].start))//对应第一种情况,即线段2被线段1包含{segments[i].start = segments[i-1].start;//将线段2的长度置为线段1的长度,然后将线段1置为0,以便后面进行总和相加segments[i].end = segments[i-1].end;segments[i-1].start = 0;segments[i - 1].end = 0;}if ((segments[i].end > segments[i - 1].end) && (segments[i].start < segments[i - 1].start))//对应第二种情况,线段1被线段2包含{segments[i - 1].start = 0;//将线段1置为0 以便后面相加segments[i - 1].end = 0;}if ((segments[i].start > segments[i - 1].start) && (segments[i].end > segments[i - 1].end) && (segments[i].start < segments[i - 1].end))//对应第三种情况,线段1在前,线段2在后,两个线段有交叉{segments[i].start = segments[i - 1].start;//将线段2 的长度赋为线段1和2除去交叉长度的总长度segments[i - 1].start = 0;//将线段1 置为0segments[i - 1].end = 0;}if ((segments[i].start < segments[i - 1].start) && (segments[i].end < segments[i - 1].end) && (segments[i].end > segments[i - 1].start))//对应第四种情况,线段2在前,线段1在后,两个线段有交叉{segments[i].end = segments[i - 1].end;//将线段2的长度置为线段1和2除去交叉长度的总长度segments[i - 1].start = 0;//将线段1 置为0segments[i - 1].end = 0;}if ((segments[i].start < segments[i - 1].end) || (segments[i].end < segments[i - 1].start))//线段1和线段2不交叉,线段1在前或者线段2在前。{continue;}}for (i = 0; i < n; i++){sum = sum + (segments[i].end - segments[i].start);//将线段进行相加。}return sum;}void test(){Segment *segments = new Segment[3];segments[0].start = 1;segments[0].end = 3;segments[1].start = 2;segments[1].end = 5;segments[2].start = 10;segments[2].end = 15;cout << Sum(2, segments) << endl;delete[]segments;}int main(){test();return 0;}
经过我的测试,题目提供的三组测试用例均以通过,我自己还设计了几组测试用例,也均通过,所以程序基本没有什么问题了。
0 0
- 小米2015校园招聘西安站
- 百度2015校园招聘前端笔试题(西安站)
- 2015小米校园招聘笔试题
- [腾讯笔试] 2015腾讯校园招聘笔试题(西安站)
- 百度2015校园招聘笔试题——研发工程师(西安站)
- 腾讯2015校园招聘研发工程师笔试题(西安站)
- 百度2015校园招聘笔试题——研发工程师(西安站)
- 微软 MSN 2005 校园招聘(西安站)笔试题
- 2014腾讯校园招聘实习笔试题目西安站
- 2012年西安校园招聘会
- 2015百度校园招聘软件研发类笔试题(笔试时间:2014-9-14,西安、哈尔滨、大连站)
- 2015百度校园招聘软件研发类笔试题(笔试时间:2014-9-14,西安、哈尔滨、大连站)
- 2015百度校园招聘软件研发类笔试题(笔试时间:2014-9-14,西安、哈尔滨、大连站)
- 小米2013校园招聘笔试题
- 校园招聘:小米2013 最新笔试题
- 小米2013校园招聘笔试题[转贴]
- 2013年小米校园招聘笔试题
- 2013年小米校园招聘笔试题
- 自定义布局执行流程之 画出自己定义的View
- 使用WebView打开网页
- 一台机器同时跑多个Tomcat
- DOM创建节点和添加属性
- C# 实现设置系统环境变量设置
- 小米2015校园招聘西安站
- 常用Maven插件介绍
- 数据挖掘WIKI
- C++
- 设计无形
- OC基础第四章:@property和@synthesize
- 8205A
- UBIFS根文件系统制作及移植
- windows和linux下简单的软件级调整相机曝光时间(或其他参数)的方式