【面试向】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) 刚去签了一个到,就带我去面试了,在一个小型会议室,面试我的是一个女面试官(第一次碰见女 ...
随机推荐
- What makes a good feature
import numpy as np import matplotlib.pyplot as plt greyhounds = 500 # 灰猎犬500只 labs = 500 # 拉布拉多犬500只 ...
- linux 下载jdk
1.官方下载jdk的地方 jdk8下载地址:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-213315 ...
- 高效C++无锁队列实现-moodycamel::ConcurrentQueue
国外一牛人做的,支持多平台,支持多线程写.多线程读,并可指定读写token,转载过来. 感觉作者也时刻维护着他这个项目,我提了一些问题,每次都会及时得到答复,而且回复得非常认真仔细,非常赞! 链接地址 ...
- Example Bookstore schema showing how data is sharded DATABASE SHARDING
w公共查询表复制至每一个碎片 http://www.agildata.com/database-sharding/ In the Bookstore example, the Primary Shar ...
- 自定义圆形图片控件CircleImageView的实现
package com.loaderman.circleimageviewdemo; import android.content.Context; import android.content.re ...
- Android百分比支持布局库的使用和源码分析
Android-percent-support这个库 描述下这个support-lib. 这个库提供了: 两种布局供大家使用: PercentRelativeLayout.PercentFrameLa ...
- flutter vscode创建objc工程
通过vscode创建flutter工程时,默认创建的是swift项目工程,如果想要修改,可以通过vscode设置默认创建语言 1. Open vscode settings. Under User S ...
- laydate中设置动态改变max与min值的方法
参考网址: 原网址:https://blog.csdn.net/cherry_11qianqian/article/details/82259704 改进的网址:https://blog.csdn.n ...
- PS技巧集合
一.把图片变模糊 图像——调整——色阶——输出色阶——滤镜——模糊——高斯模糊——半径 二.图片换色 点击右下角弹层下方的“fx”——颜色叠加——色样颜色
- C基础知识(11):错误处理
C语言不提供对错误处理的直接支持,但是作为一种系统编程语言,它以返回值的形式允许您访问底层数据.在发生错误时,大多数的C或UNIX函数调用返回1或NULL,同时会设置一个错误代码errno,该错误代码 ...