京东笔试第2道神奇数(气吐血,就差两秒就改完)

//解题思路:
//用子函数判断是否为神奇数,读取数字的每一位,存入vector;
//求取vector中每两相邻数字的差值(绝对值),存进vector;
//重复上步骤,直至只剩两个差值
//当两个差值相同时,这个数字为神奇数,否则不是神奇数

//自己运行 1 50 案例答案是对的,但是菜鸡的我加了else语句,始终编译不过
//请大神们指教,以下代码是否可行
#include<iostream>
#include<cmath>
#include<vector>

using namespace std;

bool isM(long n) // 判断是否为神奇数
{
vector<long> v;
if (n > 10)  //1 到10都不是神奇数
{
while (n != 0)  //存取每位数字
{
v.push_back(n % 10);
n /= 10;
}

int len = v.size();
while (len > 2)
{
for (int i = 0; i < len-1; i++)
{
v[i] = abs(v[i + 1] - v[i]);
}
len--;
}
if (len == 2)
{
if (v[0] == v[1])
return true;
else
return false;
}
}
//else  //这里的else没去掉,死活编译不过
return false;
}


int main()
{
long count = 0;
long l, r;
while (cin >> l >> r)
{
for (int j = l; j <= r; j++)
{
if (isM(j)) count++;
}
cout << count << endl;
}
return 0;
}
#京东##C++工程师#
全部评论
多谢楼上指教,这个解法是存在问题的,希望看过的人不要被误导了。
点赞 回复 分享
发布于 2017-09-09 11:17
讲道理是不对的112233和131232都为神奇树,按你的思路131232却不是
点赞 回复 分享
发布于 2017-09-09 10:43
思路真的赞 观察的仔细 用dp写的有点复杂
点赞 回复 分享
发布于 2017-09-09 10:15
正常循环会超时~数位dp吧
点赞 回复 分享
发布于 2017-09-09 00:34
(我是用背包做的,然后被卡常数了
点赞 回复 分享
发布于 2017-09-09 00:31
96333222 3300100 03011 3310 021 21 不要0就是 331 2 不知道我理解的对不对,同学也是拿这个把我写的跑挂的
点赞 回复 分享
发布于 2017-09-09 00:27
思路好赞
点赞 回复 分享
发布于 2017-09-09 00:05
c++
点赞 回复 分享
发布于 2017-09-08 21:59
楼主什么岗位?
点赞 回复 分享
发布于 2017-09-08 21:54

相关推荐

2025-12-28 16:32
重庆邮电大学 Java
程序员花海:1.技能放最后,来面试默认你都会,技能没啥用 2.实习写的看起来没啥含金量,多读读部门文档,包装下 接LLM这个没含金量 也不要用重构这种 不会给实习生做的 3.抽奖这个还是Demo项目,实际在公司里面要考虑策略,满减,触发点,触发规则 库存 之类的,不是这个项目这么简单 4.教育背景提前,格式为 教育背景 实习 项目 技能 自我评价
简历被挂麻了,求建议
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务