今天好兄弟说要买小米6,让我帮忙写个小程序在16个数中找出6个相加和为6666的数。

作为一个有素养的算法工程师,第一想到的自然是夹逼,不过6个数的夹逼有些难写。

看了看题目,觉得脑算也不过1分钟啊,明显3个最大的都要选,剩483,选两个尾数是9,一个位数是5的,试着选125和75,最后得出 1956 75 159 249 2099 2128,算法也不过深搜加剪枝,(半年没写算法了),夹逼的话,速度肯定要快,不过算法设计比较难,考虑这个深搜的话解空间不会很庞大,(按时交付才是最重要的,有时间在开发v2.0嘛,敏捷开发嘛)

 1 #include <iostream>
 2 #include <vector>
 3 #include <algorithm>
 4 using namespace std;
 5
 6
 7 bool fin(vector<int> num,int n,int i){
 8     if( i!=num.size()){
 9         num.erase(num.begin()+i);
10     }
11     for(int it=0;it!=num.size();++it){
12         if(n-num[it]==0){   //成功返回
13             cout<<num[it]<<" ";
14             return true;
15         }
16         if(n-num[it]<0){    //小于0剪枝
17             return false;
18         }
19         if(fin(num,n-num[it],it)){  //递归求解
20             cout<<num[it]<<" ";
21             return true;
22         }
23     }
24     return false;
25 }
26
27 int main()
28 {
29     vector<int> num(16);
30     for(int i=0;i!=16;i++){
31         cin>>num[i];
32     }
33     sort(num.begin(),num.end());
34     reverse(num.begin(),num.end());
35
36     if(fin(num,6666,16))
37         return 0;
38
39
40     return 0;
41 }
42 //19 29 39 75 89 89 89 125 129 159 236 249 299 1956 2099 2128

速度没看,不过16个数,很快。

转载于:https://www.cnblogs.com/dk666/p/6742834.html

6升小米6——算法解题相关推荐

  1. java亲密数的解题思路,算法解题思路总结 - jjhgx的个人空间 - OSCHINA - 中文开源技术交流社区...

    算法解题思路: 细读算法要求 找到极限情况 找到临界情况,结果依赖 找到最终的结束求解点 编程实现:考虑算法的空间复杂度和时间复杂度 案例说明: 假设: 输入字符串为:s, 长度为:slen, s的第 ...

  2. BFS 算法解题套路框架+几个用于BFS的set与queue用法和技巧

    BFS 算法解题套路框架 几个用于BFS的set与queue用法和技巧(set查找visited queue正常用) queue<int>q; set<string>s; in ...

  3. 高效 遍历 算法_一文学会回溯算法解题技巧

    (给算法爱好者加星标,修炼编程内功) 来源:码海 前言 上文我们学习了深度优先搜索和广度优先搜索,相信大家对这两者的算法有了比较清楚的认识,值得一提的,深度优先算法用到了回溯的算法思想,这个算法虽然相 ...

  4. 一文学会回溯算法解题技巧

    前言 上文我们学习了深度优先搜索和广度优先搜索,相信大家对这两者的算法有了比较清楚的认识,值得一提的,深度优先算法用到了回溯的算法思想,这个算法虽然相对比较简单,但很重要,在生产上广泛用在正则表达式, ...

  5. php升维,svm算法详解

    SVM方法是通过一个非线性映射p,把样本空间映射到一个高维乃至无穷维的特征空间中(Hilbert空间),使得在原来的样本空间中非线性可分的问题转化为在特征空间中的线性可分的问题. (推荐学习:phps ...

  6. 2019.9.11 小米笔试算法岗编程题 两个动归

    1.最大连续子序列之和 时间限制:C/C++语言 1000MS:其他语言 3000MS 内存限制:C/C++语言 65536KB:其他语言 589824KB 题目描述: 给定K个整数的序列{ N1, ...

  7. c语言一些算法解题技巧,c语言常见小算法的解题思路.doc

    c语言常见小算法的解题思路 判定某一年是否是闰年 闰年时间:四年一闰,百年不闰,四百年再闰.,其中 大写字母转小写字母 大写字母+32 = 小写字母 A = 65 a = 97 输入一个华氏温度,要求 ...

  8. 动态规划算法解题思路

    在做动态规划类题目时最大的感觉就是能够分析出这道题目需要用动态规划算法来解,却没有办法构建出解题步骤,看到别人的分析时候又感觉代码很简单但是自己却想不出. 其实这还是没有理解到动态规划算法的基本思想. ...

  9. 【LintCode 题解】小米面试算法题:搜索旋转排序数组

    题目描述 假设有一个排序的按未知的旋转轴旋转的数组(比如,0 1 2 4 5 6 7 可能成为4 5 6 7 0 1 2).给定一个目标值进行搜索,如果在数组中找到目标值返回数组中的索引位置,否则返回 ...

最新文章

  1. 什么是导师负责制_为什么一个导师是不够的
  2. 深入分析Java的序列化与反序列化
  3. php两个按钮左右怎么做,css布局两个button在同父标签中左右两侧分布的方法
  4. 滑动窗口,拥塞控制算法
  5. Web前端开发笔记——第四章 JavaScript程序设计 第二节 变量
  6. 剑指Offer_61_序列化二叉树
  7. oracle plsql异常,【Oracle篇】异常处理和PLSQL
  8. vector 查找结构体对象_面试大厂回来,我狠补了一把算法和数据结构
  9. java碰到乱码如何解决方法_如何处理java的乱码
  10. MTK:NICODE与ASCII码使用
  11. 理解MapReduce计算构架
  12. ssh mysql视屏_ssh+mysql实现的Java web在线订电影票系统项目源码附带视频指导教程...
  13. Zookeeper 概述与安装、配置参数、数据结构、选举机制、客户端命令
  14. DelphiXE10.4安卓编程初学者心得
  15. JAVA数据库的操作(增、删、改、查)
  16. java毕业设计_校园二手交易平台
  17. 博客中Java开发的软硬件环境
  18. html表格的多个下拉菜单,表格设置下拉多个选项
  19. ​left join 和 left semi join区别 ​
  20. 蓝牙电话协议HFP(Hands-Free Profile) 传输手机状态信息(信号/漫游/电量/运行商/电话状态)

热门文章

  1. Java常用API(一)Object
  2. 【C++】Visual Studio教程(二) - 代码编辑器
  3. 【Linux】一步一步学Linux——sh命令(225)
  4. 闪灯什么意思_车灯闪1下、2下、3下各代表什么意思?关键时刻可以保命
  5. 攻击 xxs_“吃鸡”又出现1招炸队友不受惩罚,xxs乐坏了,请别手误打载具
  6. c++大作业迷宫游戏 规定时间内完成_小学生做作业磨蹭的7个原因及对策!太准了~...
  7. python venv windows7_安装 Python、pip 和 venv
  8. 第二章 PX4-Pixhawk-RCS启动文件解析
  9. 小腿训练三部曲之(三)
  10. POJ 3258 -- River Hopscotch(二分)