华为od机试100分题-靠谱的车

昨天机试试过,能100%过,如果有更优解法,欢迎评论区指出。

题目描述:

思路与解析:

每次遇到4就跳过,所以相当于进制由变成9,对于每位如果大于4,说明对这位需要多处理一次,即这一位减去1。具体操作:

1、输入一个数。

2、用vector容器或者数组存储每个位对应的值,如果大于4单独对这一位减1。

3、将vector容器的内容取出并按9进制算出答案。

代码如下:

#include <iostream>
#include<vector>
using namespace std;

int main(){
    int n;
    cin >> n;
    vector<int> arr;
    while (n) {//将每一位放入容器,也可以插到后面(push_back),不过计算答案时要从后往前
        arr.insert(arr.begin(),n % 10);
        n /= 10;
    }
    for (int i = 0; i < arr.size(); i++) {//对于大于4的每位都要减1
        if (arr[i] > 4)
            arr[i]--;
    }
    int ans = 0;
    for (int i = 0; i < arr.size(); i++)//按9进制算出答案
        ans = ans * 9 + arr[i];
    cout << ans << endl;
    return 0;
}

#每日靠近华为offer一步#
全部评论
这里也可以这样看,他去掉了4,我们可以把数字当成九进制来算,把56789当做45678就可以了,比如100=1*9^2+0*9+0=81,17=1*9+6=15,5=4
3 回复 分享
发布于 2024-07-19 06:44 四川
n = int(input()) lst = [] while n > 0: n, x = divmod(n, 10) if x > 4: x -= 1 lst.append(x) ans = 0 for i, v in enumerate(lst): ans += v * pow(9, i) print(ans)
1 回复 分享
发布于 2024-07-04 16:23 贵州
淳桑的?
1 回复 分享
发布于 2024-07-04 13:38 甘肃
实际上就是找小于n并且包含4的有多少个数,直接一次构造出来然后判断
1 回复 分享
发布于 2024-07-04 10:45 辽宁
佬,这种题牛客有那种在线测评的吗?
点赞 回复 分享
发布于 2024-07-07 18:21 黑龙江

相关推荐

当年还在美团那个倒霉的&nbsp;Peppr&nbsp;团队工作时,我一直有个疑问:这群人每天到底在自嗨什么。每次开会一堆人围着一堆“看起来很高级”的文档转,模板统一、名词复杂、页数感人,每一页都在暗示一件事:“你不懂,是因为你不专业。”但现实是——代码照样写在&nbsp;💩&nbsp;山上,该出问题还是会出问题,这真的很逗,系统一出问题,文档的唯一作用就是证明:“我们当初确实认真写过文档。”所以本质区别到底是什么?是代码质量提升了,还是大家在精神层面完成了一次“工程师&nbsp;cosplay”?有句话说得好潮水退去才知道谁在裸泳。还记得当时的马哥、明哥(图&nbsp;1&nbsp;左)最爱反复强调一句话:“所有场景一定要想到。”、“这个场景为什么没考虑到?”不过他们这些话我是真的听进去了。不然我也不会在一年多前就说:这个项目活不过两年。顺带一提,那段时间还有个固定节目。每次下楼,总能听见我明哥在吐槽不同的人。我从他身后绕过去,经常能听到他一边抽烟一边说:“xx&nbsp;这小子太坑了,回头我一定要跟马哥说说。”于是深谙人情世故但真不会抽烟的我也会从口袋掏出一支低尼古丁含量的烟给自己点上,假意自己什么都没听到什么都不知道,只是来抽烟的。后来我才明白,这可能也是团队文化的一部分:问题永远在别人身上,而我们,永远在复盘里😂。
秋招白月光
点赞 评论 收藏
分享
评论
6
3
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务