京东笔试第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-08 21:54
c++
点赞 回复 分享
发布于 2017-09-08 21:59
思路好赞
点赞 回复 分享
发布于 2017-09-09 00:05
96333222 3300100 03011 3310 021 21 不要0就是 331 2 不知道我理解的对不对,同学也是拿这个把我写的跑挂的
点赞 回复 分享
发布于 2017-09-09 00:27
(我是用背包做的,然后被卡常数了
点赞 回复 分享
发布于 2017-09-09 00:31
正常循环会超时~数位dp吧
点赞 回复 分享
发布于 2017-09-09 00:34
思路真的赞 观察的仔细 用dp写的有点复杂
点赞 回复 分享
发布于 2017-09-09 10:15
讲道理是不对的112233和131232都为神奇树,按你的思路131232却不是
点赞 回复 分享
发布于 2017-09-09 10:43
多谢楼上指教,这个解法是存在问题的,希望看过的人不要被误导了。
点赞 回复 分享
发布于 2017-09-09 11:17

相关推荐

11-29 11:21
门头沟学院 Java
总包48.5w,意想不到的价格
想开了的垂耳兔很喜欢拱白菜:转人工
点赞 评论 收藏
分享
AaronRuan:看到了好多开奖了,不知道为啥自己也有点激动,真的替你们感到高兴啊
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务