Problem

Check if a positive integer $n$ can be written as sum of a positive integer and reverse of that integer.

Here, reverse of a positive integer is defined as the integer obtained by reversing the decimal representation of that integer.

For example, 121 = 92 + 29.

Analysis

若 $x = y + r(y)$,其中 $r(y) := \text{reverse of $y$}$,则可以确定 $y$ 是几位数。

若 $x$ 的最高位上的数字大于 $1$,则 $y$ 与 $x$ 位数相同。

若 $x$ 的最高位上的数字等于 $1$,则 $x$ 的最高位可能是 $ y + r(y)$ 进位导致的,于是有两种可能

  1. $y$ 与 $x$ 位数相同
  2. $y$ 比 $x$ 少一位

此时,我们可以分别讨论这两种情况。确定了 $y$ 的位数,进一步可以确定符合条件的 $y$ 是否存在。我们只需要判断,在不进位的情况下,$x$ 是否是回文串,特别的,当 $y$ 的长度是奇数时,中间的那一位上必须是偶数。

Implementation

// x = y + reverse(y)
// y 有 d.size() 位
bool check(vector<int> d) {
for (int i = 0, j = (int)d.size() - 1; i < j; ++i, --j) {
// case 1: d[i] == d[j]
// case 2: d[i] == d[j] + 10
// case 2: d[i] - 1 == d[j]
// case 3: d[i] - 1 == d[j] + 10
if (d[i] == d[j]) continue;
if (d[i] == d[j] + 10) d[j - 1] -= 1;
else if (d[i] - 1 == d[j]) {
d[i + 1] += 10;
}
else if (d[i] - 1 == d[j] + 10) {
d[i + 1] += 10;
d[j - 1] -= 1;
}
else {
return false;
}
}
if (d.size() & 1) {
int t = d[d.size() / 2];
return t % 2 == 0 && t >= 0 && t <= 18;
}
return true;
} bool solve(const char* s) {
vector<int> d;
for (int i = 0; s[i]; ++i) {
d.push_back(s[i] - '0');
}
bool res = check(d);
if (d.front() == 1 && d.size() > 1) {
d[1] += 10;
d.erase(d.begin());
res |= check(d);
}
return res;
}

Related materials

https://stackoverflow.com/q/54694588

https://www.mathpages.com/home/kmath004/kmath004.htm

【面试向】2019 年微软秋招笔试 Problem 3的更多相关文章

  1. 2017微软秋招A题

    时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 There is an integer array A1, A2 ...AN. Each round you may ch ...

  2. 爱奇艺2017秋招笔试(C++智能设备方向)

    虽然有方向,但是好像题目都是随机题库抽取. 选择题都很基础...挖坑,待更新 编程: 一. 奇异数: 如果一个数字满足以下条件,我们就称它为奇异数: 1.   这个数字至少有两位 2. 这个数的最低两 ...

  3. 美团2016秋招笔试B

    1.下述解决死锁的方法中,属于死锁预防策略的是? 资源有序分配法  银行家算法:避免死锁 资源有序分配法:预防死锁 资源分配图化简法:检测死锁 撤销进程法:解决死锁   2. 什么是死锁? 如果一个进 ...

  4. 二本非科班,秋招,实习,面试,offer之路

    不知不觉已经工作一年多的,我是2019年7月毕业的,但是如果算上实习就工作差不多两年了的吧. 最近不是刚刚过了圣诞节吗?然后又准备到元旦了,迎来2021年!在微信公众号上看到小部分公众号在总结2020 ...

  5. 2019秋招Java面经(未完待续)

    2019秋招Java面经(凭记忆回忆, 可能不准) 随着我们从大三升到大四...秋招也开始了. 秋招进行的还比较顺利, 刚开始没几天, 我的秋招就结束了. 到现在我玩了差不多十多天了, 总想着总结一下 ...

  6. [找工作] 2019秋招|从春招到秋招,Java岗经验总结(收获AT)

    转自(有更多) https://blog.csdn.net/zj15527620802/article/month/2018/10 前言 找工作是一件辛酸而又难忘的历程.经历过焦虑.等待.希望,我们最 ...

  7. 秋招如何抱佛脚?2022最新大厂Java面试真题合集(附答案

    2022秋招眼看着就要来了,但是离谱的是,很多同学最近才想起来还有秋招这回事,所以纷纷临时抱佛脚,问我有没有什么快速磨枪的方法, 我的回答是:有! 说起来,临阵磨枪没有比背八股文更靠谱的了,很多人对这 ...

  8. 【面试问题】——秋招面试中遇到的一些问题&思维导图&反思

    前言:秋招也跑了挺多的公司,虽然都是招Web前端,但是不同的公司,因为需求和目的不同,面试的考察点也是各不相同.我没有实习经验,只有自己学东学西比较杂也比较浅的一些知识积累可以用,这个过程我发现了自己 ...

  9. 广联达C++面经(一站式西安) - 2019秋招

    9月7号通知在广联达西安面试,早上在高新面完中兴一面就赶忙坐地铁倒公交去面试了.  一面(大概30-40min) 刚去签了一个到,就带我去面试了,在一个小型会议室,面试我的是一个女面试官(第一次碰见女 ...

随机推荐

  1. MySQL的密码操作命令

    一.请问在win2K命令提示符下怎样更改mysql的root管理员密码? >mysql -u root -p Enter password: ****** mysql> use mysql ...

  2. JavaWeb-SpringSecurity初认识

    Spring Security 安全 百度百科 功能:Spring Security对Web安全性的支持大量地依赖于Servlet过滤器.这些过滤器拦截进入请求,并且在应用程序处理该请求之前进行某些安 ...

  3. JS将后台获取毫秒数转换为自定义格式日期

    重写prototype  Date.prototype.Format = function(fmt) { var o = { "M+" : this.getMonth()+1, / ...

  4. Python file 读写与操作

    # strip() 返回数据类型为字符串# strip()去除头和尾的指定字符:# 如果没有指定,默认去掉头和尾的空格 str_1 = " he llo " # he llopri ...

  5. window环境下 恢复odoo数据库备份文件时产生的 Database restore error: Command `psql` not found.

    1,首先先查看 PostgreSQL 是否安装在C盘,如果安装在其他盘 则需要配置环境变量 配置完成后重启服务就可以了 2, 如果还不行,只需在odoo.conf中添加一个配置设置.也就是在odoo项 ...

  6. 石川es6课程---11、json

    石川es6课程---11.json 一.总结 一句话总结: ` 感觉更方便了一点,增加了一些简写 ` key-value 一样时可以简写:console.log({ a,b}}) ` 里面函数可以简写 ...

  7. [学习笔记] Tangent Distance

    Tangent Distance 简介 切空间距离可以用在KNN方法中度量距离,其解决的是图像经过有限变换之后还能否被分类正确,例如.对一张数字为5的手写数字图片,将其膨胀后得到图像p1,此时KNN还 ...

  8. VLOOKUP的了解(1)

    上周在整理资料的时候,需要将一个表中的部分东西,弄到另外一张表中.我就傻不愣登的直接粘贴.复制.没有发现VLOOKUP呀! VLOOKUP是一个查找函数,给定一个查找的目标,它就能从指定的查找区域中查 ...

  9. P2983 [USACO10FEB]购买巧克力

    P2983 [USACO10FEB]购买巧克力 题解 注意题目开 long long 贪心策略:价格从低到高,买够为止 反证:若剩下的有一个K”,比K小,那么交换,稳赚不赔 所以,在买K之前,所有比他 ...

  10. GIS面积计算问题

    好长时间不更新了,今天说点干货,项目用到的. 1.项目中要用到计算面积的,根据火星坐标: 2.百度找了各种面积计算,google了半天,也没发现那个比较准确: 直接说干货吧.咱也高大上一会,用 Arc ...