来自异国的客人 - 华为OD统一考试(D卷)

OD统一考试(D卷)

分值: 100分

题解: Java / Python / C++

alt

题目描述

有位客人来自异国,在该国使用m进制计数。

该客人有个幸运数字n(n<m),每次购物时,其总是喜欢计算本次支付的花费(折算为异国的价格后)中存在多少幸运数字。

问: 当其购买一个在我国价值k的产品时,其中包含多少幸运数字?

输入描述

第一行输入为 k,n,m。其中:

k 表示 该客人购买的物品价值 (以十进制计算的价格)

n 表示该客人的幸运数字

m 表示 该客人所在国度的采用的进制

输出描述

输出幸运数字的个数,行未无空格。

示例1

输入:
10 2 4

输出:
2

说明:
10用4进制表示时为22,同时,异国客人的幸运数字是2,故而此处输出为2,表示有2个幸运数字。

示例2

输入:
10 4 4

输出:
0

说明:
此时客人的幸运数字为4,但是由于该国最大为4进制,故而在该国的进制下不可能出现幸运数字,故而返回0

题解

这是一个基于进制转换的简单算法题。

主要思路是将十进制数转换为给定进制,然后统计在转换后的数中幸运数字出现的次数。

Java

import java.util.Scanner;
/**
 * @author code5bug
 */
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        int k = scanner.nextInt();
        int n = scanner.nextInt();
        int m = scanner.nextInt();

        // 幸运数字个数
        int cnt = 0;

        while (k > 0) {
            int t = k % m;
            if (t == n) { // 出现幸运数
                cnt++;
            }
            k /= m;
        }

        System.out.println(cnt);
    }
}

Python

k,n,m = map(int, input().split())

# 幸运数字个数
cnt = 0

while k > 0:
    t = k % m
    if t == n: # 出现幸运数
        cnt += 1
    k //= m

print(cnt)

C++

#include <iostream>

using namespace std;

int main() {
    int k, n, m;
    cin >> k >> n >> m;

    // 幸运数字个数
    int cnt = 0;

    while (k > 0) {
        int t = k % m;
        if (t == n) { // 出现幸运数
            cnt++;
        }
        k /= m;
    }

    cout << cnt << endl;

    return 0;
}

希望这个专栏不仅能帮您成功通过华为机试,还能让您熟练掌握算法。

整理题解不易, 如果有帮助到您,请给点个赞 ‍❤️‍ 和收藏 ⭐,让更多的人看到。🙏🙏🙏

#面经##春招##秋招##校招##华为#
全部评论

相关推荐

不愿透露姓名的神秘牛友
05-01 13:13
ecece:这么明目张胆虚报就业率啊
点赞 评论 收藏
分享
Ncsbbss:又想干活又想要工资,怎么什么好事都让你占了
点赞 评论 收藏
分享
评论
4
1
分享

创作者周榜

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