【面试向】2019 年微软秋招笔试 Problem 3
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)$ 进位导致的,于是有两种可能
- $y$ 与 $x$ 位数相同
- $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的更多相关文章
- 2017微软秋招A题
		时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 There is an integer array A1, A2 ...AN. Each round you may ch ... 
- 爱奇艺2017秋招笔试(C++智能设备方向)
		虽然有方向,但是好像题目都是随机题库抽取. 选择题都很基础...挖坑,待更新 编程: 一. 奇异数: 如果一个数字满足以下条件,我们就称它为奇异数: 1. 这个数字至少有两位 2. 这个数的最低两 ... 
- 美团2016秋招笔试B
		1.下述解决死锁的方法中,属于死锁预防策略的是? 资源有序分配法 银行家算法:避免死锁 资源有序分配法:预防死锁 资源分配图化简法:检测死锁 撤销进程法:解决死锁 2. 什么是死锁? 如果一个进 ... 
- 二本非科班,秋招,实习,面试,offer之路
		不知不觉已经工作一年多的,我是2019年7月毕业的,但是如果算上实习就工作差不多两年了的吧. 最近不是刚刚过了圣诞节吗?然后又准备到元旦了,迎来2021年!在微信公众号上看到小部分公众号在总结2020 ... 
- 2019秋招Java面经(未完待续)
		2019秋招Java面经(凭记忆回忆, 可能不准) 随着我们从大三升到大四...秋招也开始了. 秋招进行的还比较顺利, 刚开始没几天, 我的秋招就结束了. 到现在我玩了差不多十多天了, 总想着总结一下 ... 
- [找工作] 2019秋招|从春招到秋招,Java岗经验总结(收获AT)
		转自(有更多) https://blog.csdn.net/zj15527620802/article/month/2018/10 前言 找工作是一件辛酸而又难忘的历程.经历过焦虑.等待.希望,我们最 ... 
- 秋招如何抱佛脚?2022最新大厂Java面试真题合集(附答案
		2022秋招眼看着就要来了,但是离谱的是,很多同学最近才想起来还有秋招这回事,所以纷纷临时抱佛脚,问我有没有什么快速磨枪的方法, 我的回答是:有! 说起来,临阵磨枪没有比背八股文更靠谱的了,很多人对这 ... 
- 【面试问题】——秋招面试中遇到的一些问题&思维导图&反思
		前言:秋招也跑了挺多的公司,虽然都是招Web前端,但是不同的公司,因为需求和目的不同,面试的考察点也是各不相同.我没有实习经验,只有自己学东学西比较杂也比较浅的一些知识积累可以用,这个过程我发现了自己 ... 
- 广联达C++面经(一站式西安) - 2019秋招
		9月7号通知在广联达西安面试,早上在高新面完中兴一面就赶忙坐地铁倒公交去面试了. 一面(大概30-40min) 刚去签了一个到,就带我去面试了,在一个小型会议室,面试我的是一个女面试官(第一次碰见女 ... 
随机推荐
- CDOJ  1263   The Desire of Asuna  贪心
			The Desire of Asuna Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Othe ... 
- jupyter工具
			国内源安装: pip install jupyter -i http://pypi.douban.com/simple --trusted-host pypi.douban.com pip --def ... 
- Android NDK加载SD卡中的so
			最近公司框架刚移植完成,由于框架程序要调用子程序,每个子程序都是一个so文件,有好几百个,把所有的so和apk打包不现实,及时可以升级维护也很麻烦.所以需要放SD卡中.考虑两种方式 1 放到设备中的 ... 
- Hive运行原理--JOIN
			对于 JOIN 操作: INSERT OVERWRITE TABLE pv_users SELECT pv.pageid, u.age FROM page_view pv JOIN user u ON ... 
- 主线程 Looper.loop() 死循环为何不会ANR
			先看下 ActivityThread 中的这段代码: 而 loop() 方法中,存在一个死循环: public static void loop() { ... ... ... for (;;) { ... 
- OUC_Summer Training_ DIV2_#5
			这是做的最好的一次了一共做了4道题 嘻嘻~ A - Game Outcome Time Limit:2000MS Memory Limit:262144KB 64bit IO For ... 
- TCP时间戳选项Timestamp
			时间戳选项发送方在每个报文段中放置一个时间戳值.接收方在确认中返回这个数值,从而允许发送方为每一个收到的ACK计算RTT(我们必须说“每一个收到的ACK”而不是“每一个收到的报文段”,是因为TCP通常 ... 
- ExpectedConditions API
			使用 public boolean isPresent(String xpath, int waitingTimeInSec) { try { WebDriverWait wait = new Web ... 
- Python 的with关键字
			Python 的with关键字 看别人的代码时,with关键字经常会出现,博主决定梳理一下with以及python中上下文(context)的概念 1. 上下文管理器概念 Context Manage ... 
- 反射 go
			reflect.Valueof 到底是个什么? 反射值对象(reflect.Value)提供一系列方法进行零值和空判定,如下表所示. 反射值对象的零值和有效性判断方法 方 法 说 明 IsNil() ... 
