华为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 黑龙江

相关推荐

不愿透露姓名的神秘牛友
06-04 15:20
牛客61197583...:看到室友一个个没怎么学通过关系直接入职或者接到面试,真的很难受。八股不知道背了多少遍,hot100也刷了1.5遍了,但就是没有面试的机会,唉
点赞 评论 收藏
分享
程序员牛肉:主要是因为小厂的资金本来就很吃紧,所以更喜欢有实习经历的同学。来了就能上手。 而大厂因为钱多,实习生一天三四百的就不算事。所以愿意培养你,在面试的时候也就不在乎你有没有实习(除非是同级别大厂的实习。) 按照你的简历来看,同质化太严重了。项目也很烂大街。 要么换项目,要么考研。 你现在选择工作的话,前景不是很好了。
点赞 评论 收藏
分享
评论
6
3
分享

创作者周榜

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