牛客网 vivo2020届春季校园招聘在线编程考试 第2题

  • 1、问题分析
  • 2、问题解决
  • 3、总结

1、问题分析

基本思路是:

1、如果有因子大于等于 10 ,说明不存在 m,使得 m 的各位(个位、十位、百位 … …)之乘积等于n,提前结束
2、如果满足第一个条件,则尽量将因子个数减少。
代码我已经进行了详细的注释,理解应该没有问题,读者可以作为参考,如果看不懂(可以多看几遍),欢迎留言哦!我看到会解答一下。

2、问题解决

  笔者以C++方式解决。

#include "iostream"using namespace std;#include "algorithm"
#include "vector"
#include "queue"
#include "set"
#include "map"
#include "cstring"
#include "stack"class Solution {private:// 存储 n 因式分解的结果// 如:n = 36, 则 dp={2,2,3,3}vector<int> dp;
public:/*** 输入一个整形数值,返回一个整形值* @param n int整型 n>9* @return int整型*/int solution(int n) {// write code here// 将 n 因式分解deal(n);// 处理因式分解之后的结果return dfs();}/*** 处理因式分解之后的结果* 基本思路是:* 1、如果有因子大于等于 10 ,说明不存在 m,使得 m 的各位(个位、十位、百位 ... ...)之乘积等于n,提前结束* 2、如果满足第一个条件,则尽量将因子个数减少* @return*/int dfs() {//  m 的各位(个位、十位、百位 ... ...) 结果数组vector<int> temp;int data = 1;// 遍历因子数组for (int i = dp.size() - 1; i >= 0; --i) {// 如果有因子大于等于 10 ,说明不存在 m,使得 m 的各位(个位、十位、百位 ... ...)之乘积等于n,提前结束if (dp[i] >= 10) {return -1;}// 由于最小的数,他的位数一定是最小,所以我们需要尽量将因子个数减少,如果可以减少,则更新因子的值if (data * dp[i] < 10) {data = data * dp[i];} else {// 如果因子的值无法更新,则将其放入结果数组,初始化为  dp[i] 并重复上述操作temp.push_back(data);data = dp[i];}}// 最后的 data 还有剩余的值要记得存放到 结果数组汇总if (data != 1) {temp.push_back(data);}int result = 0;// 将结果数组从小到大排序sort(temp.begin(), temp.end());// 将结果数组变成真实的结果for (int i = 0; i < temp.size(); ++i) {result = result * 10 + temp[i];}// 返回最终的结果return result;}/*** 将 n 因式分解* 并将因式分解的结果保存到 dp 数组中* @param n*/void deal(int n) {// 之所以是 i <= n ,是每次有新的因子时,我们都会更新 n 的值for (int i = 2; i <= n; ++i) {if (n % i == 0) {// 保存新的因子dp.push_back(i);// 重置 n 的值n /= i;// 这里注意边界--i;}}}};int main() {Solution *pSolution = new Solution;int i = pSolution->solution(36);cout << i << endl;system("pause");return 0;
}

运行结果

有点菜,有时间再优化一下。

3、总结

  书上的代码直接运行绝大部分是对的,但是总有一些软件的更新使得作者无能为力。之前的API是对的,但是之后就废弃了或修改了是常有的事。所以我们需要跟踪源代码。这只是一个小小的问题,如果没有前辈的无私奉献,很难想象我们自己一天能学到多少内容。感谢各位前辈的辛勤付出,让我们少走了很多的弯路!

点个赞再走呗!欢迎留言哦!

牛客网 vivo2020届春季校园招聘在线编程考试 第2题相关推荐

  1. 牛客网 vivo2020届春季校园招聘在线编程考试 第3题

    牛客网 vivo2020届春季校园招聘在线编程考试 第3题 1.问题分析 2.问题解决 3.总结 1.问题分析   主要就是两个数学公式.代码我已经进行了详细的注释,理解应该没有问题,读者可以作为参考 ...

  2. 牛客网vivo2020届春季校园招聘在线编程考试

    来源:牛客网vivo2020届春季校园招聘在线编程考试 https://www.nowcoder.com/question/next?pid=22390442&qid=925105&t ...

  3. 【c++】牛客网 vivo2020届春季校园招聘在线编程考试题 手机锁屏的有效模式

    题目参考: 牛客网 vivo2020届春季校园招聘在线编程考试题 一根烟,一壶酒,一道算法编一宿... 这是个明显的图结构,九个结点,任意两个节点间相连,我们可以求出图的所有所有满足如下要求的有序路径 ...

  4. vivo2020届春季校园招聘在线编程考试 解题报告 Apare_xzc

    vivo2020届春季校园招聘在线编程考试 解题报告 题目链接:牛客链接 A. 手机屏幕解锁模式 分析: 这是一个智能手机的图案锁,有3*3=9个点.现在要求所有图案中经过的点的个数再[m,n]这个范 ...

  5. vivo2020届春季校园招聘在线编程考试--[编程题]vivo智能手机产能

    vivo2020届春季校园招聘在线编程考试--[编程题]vivo智能手机产能 题目 解题思路 代码块 题目 在vivo产线上,每位职工随着对手机加工流程认识的熟悉和经验的增加,日产量也会不断攀升. 假 ...

  6. vivo2020届春季校园招聘在线编程考试--[编程题]数位之积

    vivo2020届春季校园招聘在线编程考试--[编程题]数位之积 题目 解题思路 代码块 题目 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M 现给定任意正 ...

  7. vivo2020届春季校园招聘在线编程考试 [编程题]vivo智能手机产能 C++实现

    [编程题]vivo智能手机产能 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M 在vivo产线上,每位职工随着对手机加工流程认识的熟悉和经验的增加,日产量也 ...

  8. vivo2020届春季校园招聘在线编程考试 [编程题]数位之积 C++实现

    [编程题]数位之积 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M 现给定任意正整数 n,请寻找并输出最小的正整数 m(m>9),使得 m 的各位(个 ...

  9. vivo2020届春季校园招聘在线编程考试

    1/3 [编程题]手机屏幕解锁模式 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M 现有一个 3x3 规格的 Android 智能手机锁屏程序和两个正整数  ...

最新文章

  1. 017-封装-OC笔记
  2. dram和nand哪个难生产_DRAM与NAND差别这么大,存储之争都争啥?-嵌入式系统-与非网...
  3. 在stringgrid的drawcell事件处理过程中,给单元格赋值时,要用textout输出,不要像一般给cell[i,j]赋值那样。
  4. spring boot实现下载文件
  5. jetty java_Jetty,Java和OAuth入门
  6. 二十八种未授权访问漏洞合集(暂时最全)
  7. 金币(信息学奥赛一本通-T1100)
  8. 【AMAD】django-activity-stream
  9. 电商美工需要的优质PSD素材,减少设计师75%办公加班时间
  10. 话里话外:参展管理信息化年会 聚会谈咨询需求有市场
  11. Together与Visual.Studio.NET的结合使用(一)
  12. 谷歌浏览器如何免费复制百度文库,解决禁止复制,禁止使用右键等
  13. excel 链接批量转图片
  14. jenkins+docker进行coverity检查自动构建
  15. Mac下载pd虚拟机以及激活
  16. 浅谈Anchor free与Anchor based
  17. GitHub上的项目受美国出口管制吗?
  18. 计算机常用工具软件实训总结报告,计算机常用工具软件实训报告精编版.doc
  19. 关于解决乱码问题的几个步骤
  20. web登录实现带php

热门文章

  1. 机器学习之模型拟合效果的判断笔记
  2. 首都师范 博弈论 3 2 4混合策略纳什均衡
  3. html5 手机随机抽奖,利用HTML5的devicemotion事件实现手机摇一摇抽奖,年会抽奖
  4. 音视频融合通信系统(音视频数据和多种通信方式融合)
  5. 几种常见python开发工具
  6. 稳稳当当学java之抽象类和接口(11)
  7. 课程标准模板 java,实训(Web)课课程标准模板
  8. 安全狗正式加入微软MAPP计划
  9. 【项目实战】springboot+vue舞蹈课程在线学习系统-java舞蹈课程学习打卡系统的设计与实现
  10. PHP允许用户用谷歌账号登录网站