题目描述

又到了丰收的季节,恰好小易去牛牛的果园里游玩。 牛牛常说他多整个果园的每个地方都了如指掌,小易不太相信,所以他想考考牛牛。 在果园里有N堆苹果,每堆苹果的数量为ai,小易希望知道从左往右数第x个苹果是属于哪一堆的。 牛牛觉得问题太简单了,所以希望你来替他回答。

输入描述:

第一行一个数n(1<=n<=10^5) 第二行n个数ai(1<=ai<=1000),表示从左往右数第i堆有多少苹果 第三行一个数m(1<=m<=10^5),表示有m次询问 第四行m个数qi,表示小易希望知道第qi个苹果属于哪一堆。

输出描述:

m行,第i行输出第qi个苹果属于哪一堆。

输入例子1:

5
2 7 3 4 9
3
1 25 11

输出例子1:

1
5
3

分析:
共有n堆苹果,每堆的个数为a[i],要查找从左往右数第x个苹果是属于哪一堆的。
示例:n=5,a[] = {2, 7, 3, 4, 9};
若x属于第一堆,则x<=2(a[0]);
若x属于第二堆,则a[0]< x <=2+7(a[0]+a[1]);
若x属于第三堆,则a[0]+a[1] < x <=2+7+3(a[0]+a[1]+a[2]);
………………………
由此可知,依次求出前n(1,2,…,n)堆苹果数量之和sum[n] = {2, 9, 12, 16, 25},查第x个苹果是属于哪一堆的,即是在递增序列中的查找问题。对于有序序列的查找,首先想到的应该就是二分查找,因此,此题就可解了。

参考代码:

//n:苹果的堆数;a:每堆苹果的个数;no:查的是第几个苹果
//返回的是从0开始的序号
int getOwn(int n, int a[], int no)
{if(n <= 0 || a == NULL)return 0;int ret = 0;int *sum = (int*)malloc(sizeof(int)*n);sum[0] = a[0];for(int i=1; i<n; i++){sum[i] = sum[i-1] + a[i];}//二分查找int low = 0;int high = n - 1;int mid = 0;while(low <= high){mid = (high + low) / 2;if(sum[mid] == no)return mid;else if(sum[mid] > no)high = mid - 1;elselow = mid + 1;}free(sum);return low;
}int main()
{/*int x[] = {2,7,3,4,9};int tmp = getOwn(5, x, 18);cout<<tmp+1<<endl;*/int n, t;cin>>n; //苹果的堆数int *a = (int*)malloc(sizeof(int)*n);for(int i=0; i<n; i++)  //每堆苹果的个数{cin>>a[i];}cin>>t; //查询的次数int *x = (int*)malloc(sizeof(int)*t);for(int i=0; i<t; i++) //每次查的是第几个苹果{cin>>x[i];}vector<int> result;for(int i=0; i<t; i++){//根据输出例子可知,应在求得的结果上加1才是最终的结果int tmp = getOwn(n, a, x[i]) + 1;result.push_back(tmp);}vector<int>::iterator it = result.begin();for(; it != result.end(); it++){cout<<*it<<endl;}free(a);free(x);return 0;
}

2019网易校招内推笔试题--苹果属于哪一堆相关推荐

  1. 网易2017内推笔试题--小易老师的疯狂数列

    小易老师是非常严厉的,它会要求所有学生在进入教室前都排成一列,并且他要求学生按照身高不递减的顺序排列.有一次,n个学生在列队的时候,小易老师正好去卫生间了.学生们终于有机会反击了,于是学生们决定来一次 ...

  2. 360集团2016JAVA研发工程师内推笔试题

    360集团2016JAVA研发工程师内推笔试题 题目来源:牛客网 https://www.nowcoder.com/test/question/analytic?tid=21122281 1.执行以下 ...

  3. 2016网易有道内推笔试题

    1. 洗牌 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Problem Descr ...

  4. 完美世界运营培训生内推笔试题

    1.请选择两个不同游戏类别(如手游,页游,家用机游戏等),说明受众的异同点. 2.如果你在给老板做PPT演示的时候,突然弹出了不雅图片,你会怎么做? 3.你想知道A是否还是你的好友,但是又不能直接问他 ...

  5. 蘑菇街2019届校招-测试类笔试题

    1.在Linux上,对于多进程,子进程继承了父进程的下列哪些?(共享内存.信号掩码.已打开的文件描述符) 2.java语言中,在同一包下,以下说法正确的有() (super.方法()可以调用父类的所有 ...

  6. 2018年网易校招内推编程题之交错01串

    如果一个01串任意两个相邻位置的字符都是不一样的,我们就叫这个01串为交错01串.例如: "1","10101","0101010"都是交错 ...

  7. 数据分析真题日刷 | 京东2019校招数据分析工程师笔试题

    今日真题 网易2018校园招聘数据分析工程师笔试卷(来源:牛客网) 题型 客观题:单选51道,不定项选择12道 完成时间 120分钟 牛客网评估难度系数 3颗星 ❤️ 「更多数据分析真题」 <数 ...

  8. 滴滴2019校招产品经理笔试题

    滴滴2019校招产品经理笔试题 题目一 题目一 对于一个50层的商业型物业楼,1-10层为百货大楼,11-50层为写字楼. 请规划楼层的经营内容或租赁对象: 有10部电梯,请根据经营情况,规划这10部 ...

  9. 百度2019校招计算机视觉方向笔试题

    百度2019校招计算机视觉方向笔试题 第一题:K-means聚类 第二题:相机模型 第三题:自动驾驶 第四题:目标检测 第一题:K-means聚类 关于K-means聚类算法,请回答以下问题: K-m ...

最新文章

  1. Oracle的使用和Oracle安装过程
  2. 如何使用Spring优雅地处理REST异常?
  3. python动态爬取不一样的url_什么情况?python这次居然被web scraper比下去了
  4. 1031. 查验身份证(15)
  5. 60分钟快速入门PyTorch
  6. Spring简化Java开发_spring如何简化java开发
  7. vim怎么跳转到函数定义处_Vim、gvim操作跳转光标区块和代码块的跳转
  8. androidx86安装pc后无法联网_Ubuntu 16.04 安装显卡驱动后循环登录和无法设置分辨率的一种解决方案
  9. Linux工作笔记037---Centos下Linux创建用户_用户组_删除用户
  10. 宿舍电源额定500w,我的电脑550w的,有什么办法能解决吗?
  11. DIV+CSS常见错误汇总
  12. 大事件!35的程序员竟然失去了面试资格,这是为什么?
  13. eclips 创建 maven项目
  14. admin is not in the sudoers file. This incident will be reported
  15. 怎么创建电脑的无线网络连接服务器,怎么开通无线网络
  16. EPLAN中如何画屏蔽双绞线
  17. HTML---复选框默认打钩
  18. pycharm汉化教程
  19. 基于DLNA的移动端网络视频投屏技术
  20. Java各种加密方式集锦(AES,DES,RSA,DSA,MD5,SHA)

热门文章

  1. 算法和数据结构的关系?
  2. 登录、发红包、二维码都怎么测?
  3. 解决CAD2021启动致命错误代码FD9BB87DhZ这么回事
  4. kNN算法原理与实战
  5. 设计模式整理(人人都懂设计模式)
  6. iPhone 4 问世 | 历史上的今天
  7. 【贪婪匹配】和【非贪婪匹配】
  8. 手机APP分析平台项目(八)
  9. 百变星君Beta分布
  10. golang_3_结构体