eBay校园招聘编程题-淘气的小明
来源:互联网 发布:闽江网络教学平台 编辑:程序博客网 时间:2024/05/17 04:41
题目:
代码:
#include <stdlib.h>#include <stdio.h>#include <algorithm>#include<iostream>#include<hash_set>#include<hash_map>#include <string>using namespace std;vector<int>base = { 0, 1, 1, 2, 2, 2, 3 };int countnumber(int num) {if (num <= base.size() - 1)return base[num];vector<int>tmp = base;for (int i = 7; i <= num; i++)tmp.push_back(tmp[i / 2] + 1);return tmp[num];}int main(){int len, number;cin >> number;while (number){//段数cin >> len;int re = countnumber(len);cout << re << endl;number--;}return 0;}
输出:
解析:
刚开始看到这个题,觉得十分困难,最大的问题是如何实现任意三根竹子之间不能构成三角形,如果解决了这个问题那么其它的问题都好解决!!
我们知道如果给定三个整数a,b,c,如果这三个数不能构成三角形那么只要满足a>=b+c,其中a是最大的数,那么它们就不能构成三角形,那么对于这个问题,我们要进行
类似的应用,假设我们有一个数num=17,一开始我们也不知道它会被切成多少段,但是为了满足任意三段都不能构成三角形,我们做如下操作
第一步:
先将17分成两段,如果num是偶数,那么两段的长度相等,如果是基数,那么会被分成9和8两段;
第二步:
我们对第一步中的较小者再次进行切割,因为17被分成了9和8两段,如果继续对8进行切割,那么无论8被切割成多少段,我们在8的段数中任意两段的和都不会大于9;
第三步:
进过上述两步操作,17被切割成9,4,4,对最后一个4我们进行递归,就像处理17一样。这个时候4只能被切割成3和1,所以17最终被切割成17=9+4+3+1;
所以这个算法的逻辑是将num切割成如下形式:
a1(a2(a3(a4(a5(a6(a7))))))
当我们随便取三个数的时候,其中一个数和另外两个数必然不再一个括号里,那么那两个数的和必然小于或等于另外一个数,所以它们一定不能构成三角形!!!!
0 0
- eBay校园招聘编程题-淘气的小明
- 小明的棋盘(烽火2017校园招聘)
- 网易2018校园招聘的部分编程题
- 微软2014校园招聘笔试编程题
- 2016校园招聘笔试编程题_1
- 滴滴2017校园招聘在线编程题
- 阿里校园招聘2017编程题
- 美团2017校园招聘编程题
- 2017校园招聘 携程编程题
- 2017百度校园招聘编程题
- 小米2017校园招聘编程题
- 挖财2017年校园招聘,编程题
- 京东2015校园招聘笔试编程题
- 搜狗2018校园招聘编程题学习
- 完美世界2017校园招聘编程题
- 网易2018校园招聘编程题
- 校园招聘_小插曲
- 网易2018校园招聘编程题真题-[编程题] 魔法币
- C# delegate 用法
- C++开源代码项目汇总(转载分享的)
- 关于windows下ssh-add失败的解决办法
- POJ Problem 3940 Grey Area
- 根据ip地址获取所在省市城市地区的真实地址/php函数
- eBay校园招聘编程题-淘气的小明
- 第9周项目3-稀疏矩阵的三元组表示的实现及应用(1)
- 1042 字符统计
- 6.nginx源码分析之数据结构:ngx_pool_t
- js地址栏加密传参
- Android偏好设置SharedPreference你不知道的秘密
- 数据结构实验之二叉树一:树的同构数据结构实验之二叉树一:树的同构 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem D
- 第九周项目2-对称矩阵压缩存储的实现与应用(1)
- 【第九周项目3-稀疏矩阵的三元组表示的实现及应用(2)】