C++开发工程师 京东 2018秋招编程题 (代码后续更新。。。)


1、神奇数

将一个数n的各数位分成两部分,两部分之和相等,则称这个数为神奇数。比如242分成[2,2]、[4]。输入一个范围[l, r],输出这个范围内神奇数的个数。

示例:

输入:
1,50
输出:
4

解析:

判断一个数是否是神奇数,首先应该获取其各个数位{a1, a2, a3, a4, …},按照神奇数的定义,需要将数位分成两部分,且两部分元素和相等,因此所有数位的和sum{a1, a2, a3, a4, …}必为偶数。如果不是偶数,则必然不是神奇数

因此,这个问题就演变成,在{a1, a2, a3, a4, …}中寻找一个子集,使得sum{子集} = sum/2

显然,这是一个0-1背包问题。可以用回溯法、动态规划
这里使用动态规划,用dp[i][j]表示子数组{a1, a2, a3, a4,…, ai}的元素和是否等于j
初始dp[i][0] = true (所有元素都不选,和为j)
如果不选择第i个元素,则dp[i][j] = dp[i-1][j]
如果选择第i个元素,则dp[i][j] = dp[i-1][j-num[i]]
因此,dp[i][j] = dp[i-1][j] || dp[i-1][j-num[i]]
dp[n][newSum]即表示是否可以找到一个子集,其元素和为sum/2。

C++代码实现

#include <iostream>
#include <vector>
using namespace std;
int l=0,r=0;//动态规划
bool canPartition(vector<int>&dicts,int n,int sum)
{vector<vector<bool>> dp(n+1,vector<bool>(sum+1,false));for(int i=0; i<=n; i++)dp[i][0] = true;for(int j=1; j<=sum; j++){for(int i=1; i<=n; i++){dp[i][j] = dp[i-1][j]; //不选第i个元素if(j>=dicts[i-1])      //选第i个元素dp[i][j] = dp[i][j] || dp[i-1][j-dicts[i-1]];}}return dp[n][sum];
}bool isSqs(int num)
{vector<int> dicts(10,0);int k=0,sum=0;while(num!=0){dicts[k++] = num%10;num /= 10;sum += dicts[k-1];}if(sum & 1)return false;return canPartition(dicts,k,sum>>1);
}int sqs()
{if(r<11)return 0;if(r==11)return 1;int cnt = 1;for(int i=12; i<=r; i++){if(isSqs(i))cnt++;}return cnt;
}int main()
{cin>>l>>r;cout<<sqs();return 0;
}

2、疯狂的数列

有一个无限数列,{1,2,2,3,3,3,4,4,4,4,…},数字n在数列中出现n次,且是连续的。输入一个整数n,输出第n项数字。n的范围为[1,10^18]。

示例:

输入:
169
输出:
18

解析:

用dp[i]表示数字i在无限数列的索引,则有:
dp[1] = 1
dp[2] = 3
dp[3] = 6
dp[4] = 10
dp[5] = 15

dp[n] = n*(n+1)/2
因此判断第n项的数字,应该找到dp[i]<= n <=dp[i+1],
这里的i 或者 i+1 即为结果。

C++代码实现
下面这个代码会超时。

int getIndex(long long& n)
{if(n==1)return 1;long long sum = 0,last = 1;for(int i=sqrt(n); i<n && sum<=n; i++){sum = ((i+1)*i)>>1;if(sum==n)return i;else if(sum < n)last = i;}return last+1;
}int main()
{long long n;cin>>n;cout<<getIndex(n);return 0;
}

京东2018秋招编程题相关推荐

  1. 2018深信服java笔试题,深信服2018秋招编程题

    深信服2018秋招编程题 深信服2018秋招编程题 第一题: 其中,reverse函数的代码实现如下: 1. unsigned int reverse(unsigned int num) { unsi ...

  2. 滴滴2018秋招编程题

    滴滴 2018秋招 编程题 1.寻找丑数 丑数的定义是,只包含因子2.3和5的数称作丑数.比如6和8是丑数,14不是丑数,因为含有因子7.输入一个整数n,输出第n个丑数.我们认为第一个丑数是1. 解析 ...

  3. 今日头条2018秋招编程题

    今日头条 2018秋招 Android方向 编程题 1.手串 作为一个手串艺人,有金主向你订购了一条包含n个杂色串珠的手串–每个串珠要么无色,要么涂了若干种颜色.为了使手串的色彩看起来不那么单调,金主 ...

  4. 2018深信服java笔试题_深信服2018秋招编程题

    第一题: 其中,reverse函数的代码实现如下: 1. unsigned int reverse(unsigned int num) { unsigned int ans = 0; for (int ...

  5. 携程2018 秋招编程题 - java

    第一题: 两个排好序的数组 求中位数 import java.util.Comparator; import java.util.PriorityQueue; import java.util.Sca ...

  6. 猎豹2018秋招编程题2

    问题:排列问题.给出n个同学,求可能的排名顺序,要考虑并列的情况.如n=2,结果为3,:n=3,结果为13: #include<iostream> using namespace std; ...

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

    今日真题 京东2018秋招数据分析工程师笔试题(来源:牛客网) 题型 客观题:单选18道,不定项选择12道 主观题:编程2道 完成时间 120分钟 牛客网评估难度系数 3颗星 写到「数据分析真题日刷」 ...

  8. 【求职】京东 2018 秋招测试开发工程师笔试题

    京东 2018 秋招测试开发工程师笔试题 一.单选题 1.若度为m 的哈夫曼树中,其叶结点个数为 n,则非叶结点的个数为( ) A. n-1 B. n/m-1 C. (n-1)/(m-1) D. n/ ...

  9. 网易2017秋招编程题集合

    [编程题]回文序列 如果一个数字序列逆置之后跟原序列是一样的就称这样的数字序列为回文序列.例如: {1, 2, 1}, {15, 78, 78, 15} , {112} 是回文序列,  {1, 2, ...

最新文章

  1. 设置日期和时间的设计与实现
  2. C++程序员如何入门Unreal Engine 4
  3. 用户home目录下的.gitconfig 和 库文件夹目录下的 .gitignore 示例
  4. Java 中 StringBuilder 在高性能用法总结
  5. DataScience:深入探讨与分析机器学习中的数据处理之线性变换—标准化standardization、归一化Normalization/比例化Scaling的区别与联系
  6. 关于分布式计算的一些概念
  7. ES5-13 对象属性遍历、this、callee、caller
  8. 在maven中开发Spring需要的jar依赖
  9. 【转载】安装程序无法复制文件CONVLOG.EX
  10. JDBC学习笔记(1)
  11. 网络运维在经济危机中茁壮成长
  12. 格式工厂pdf转换成html,PDF转html转换器(Adept PDF to Html Converter)
  13. c++ primer plus 对象和类
  14. 正确安装vray5 for 3dsMax步骤
  15. 搞清楚p问题、NP问题、NP完全问题和NP难问题
  16. 云服务器5m带宽会有什么样的速度?
  17. 安科瑞电力监控系统在教学演示中的应用
  18. Flutter InAppWebView 软键盘问题
  19. 设计模式01---设计模式基础篇01
  20. Mac 终端——常用命令语

热门文章

  1. php获取七牛上传token失效,上传文件到七牛时,bad token了怎么处理?
  2. Nginx 关于 Rewrite 执行顺序详解
  3. 【榜单公布】10·24征文活动结果出炉!
  4. HDU6397 Character Encoding 插板法+容斥
  5. 百度竞价ocpc投放是一门玄学吗
  6. 【分布式缓存之Voldemort 介绍】
  7. 处理python SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: trun
  8. 调用摄像头接口方法合集
  9. 【小技巧】一招教你下载b站视频到本地
  10. 4位共阴极数码管的动态扫描电路VHDL设计