京东笔试第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-09 14:54
已编辑
华南农业大学 产品经理
大拿老师:这个简历,连手机号码和照片都没打码,那为什么关键要素求职职位就不写呢? 从上往下看,都没看出自己到底是产品经理的简历,还是电子硬件的简历? 这是一个大问题,当然,更大的问题是实习经历的描述是不对的 不要只是去写实习流程,陈平,怎么去开会?怎么去讨论? 面试问的是你的产品功能点,是怎么设计的?也就是要写项目的亮点,有什么功能?这个功能有什么难处?怎么去解决的? 实习流程大家都一样,没什么优势,也没有提问点,没有提问,你就不得分 另外,你要明确你投的是什么职位,如果投的是产品职位,你的项目经历写的全都是跟产品无关的,那你的简历就没用 你的面试官必然是一个资深的产品经理,他不会去问那些计算机类的编程项目 所以这种四不像的简历,在校招是大忌
点赞 评论 收藏
分享
头像
11-21 11:39
四川大学 Java
是红鸢啊:忘了还没结束,还有字节的5k 违约金
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务