华为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一步#
全部评论
实际上就是找小于n并且包含4的有多少个数,直接一次构造出来然后判断
1
送花
回复 分享
发布于 07-04 10:45 辽宁
淳桑的?
1
送花
回复 分享
发布于 07-04 13:38 甘肃
现代汽车中国前瞻数字研发中心
校招火热招聘中
官网直投
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
送花
回复 分享
发布于 07-04 16:23 贵州

相关推荐

4 1 评论
分享
牛客网
牛客企业服务