2018京东笔试 疯狂序列 神奇数
2017-09-09 21:30
363 查看
疯狂序列
输入:169
输出:18
#include <iostream> #include <math.h> using namespace std; int main() { long long n; long long m, a, b, res; while (scanf("%lld", &n) != EOF) { m = sqrt((double)2 * n); a = m*(m + 1) / 2; b = (m + 1)*(m + 2) / 2; if (n <= a) res = m; else if (n <= b) res = m + 1; else res = m + 2; printf("%lld\n", res); } return 0; }
神奇数
#include <iostream> #include <math.h> #include <vector> #include <algorithm> #include <numeric> #include <map> using namespace::std; bool coreCode2(vector<int>& vec) { int len = vec.size(); int sum = accumulate(vec.begin(), vec.end(), 0); vector<vector<int>> dp(len + 1, vector<int>(sum / 2 + 1)); for (int i = 1; i <= len; ++i) { for (int j = 1; j <= sum / 2; ++j) { if (j >= vec[i - 1]) dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - vec[i - 1]] + vec[i - 1]); else dp[i][j] = dp[i - 1][j]; } } if ((sum - 2 * dp[len][sum / 2]) == 0) { return true; } else { return false; } } int main() { int left = 0, right = 0; cin >> left >> right; int result(0); bool flag; map<vector<int>, bool> record; for (auto i = left; i <= right; ++i) { vector<int> numVec; numVec.reserve(10); int tmp; int num1 = i; while (num1) { tmp = num1 % 10; num1 = num1 / 10; numVec.push_back(tmp); } sort(numVec.begin(), numVec.end()); auto iter = record.find(numVec); if (iter == record.end()) { flag = coreCode2(numVec); record[numVec] = flag; if (flag) { ++result; } } else { flag = iter->second; if (flag) { ++result; } } } cout << result; return 0; }
相关文章推荐
- 2018 京东笔试疯狂序列
- 【2018校招笔试-京东=java开发】题目1括号匹配方案
- 2018网易笔试题-操作序列
- 京东2018在线笔试题 第一个编程大题
- 编程题(1):笔试题-京东软件测试2018实习招聘
- 搜狐集团2018秋季校招笔试题 kolakoski序列
- 2018网易校招笔试题之疯狂队列
- 2018京东前端笔试题笔试题
- 2017.09.08京东校招C/C++编程题-疯狂的序列
- 京东笔试题 神奇数
- 京东2018校招在线笔试编程题①
- 给定整数序列求连续子串最大和 - 滴滴出行2018校园招聘内推笔试-研发工程师
- 2018京东校招Java笔试题
- 京东2018秋招前端笔试编程题
- 2018京东校招笔试题-数据分析岗
- 2018京东笔试
- 2017阿里,百度,京东java面试+笔试大合集,2018的你会吗?
- 美团点评2018提前批笔试题1 最长子序列 -- JAVA 进阶
- 2018网易内推笔试-操作序列(python)
- 【JZOJ5272】【GDOI2018模拟】神奇的重复序列(DP,性质题)