华为OD机试 2024E卷题库疯狂收录中,刷题点这里
专栏导读
本专栏收录于《华为OD机试真题(Python/JS/C/C++)》。
刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新,全天CSDN在线答疑。
一、题目描述
有位客人来自异国,在该国使用m进制计数。
该客人有个幸运数字n(n<m),每次购物时,其总是喜欢计算本次支付的花费(折算为异国的价格后)中存在多少幸运数字。
问: 当其购买一个在我国价值k的产品时,其中包含多少幸运数字?
二、输入描述
第一行输入为 k,n,m。其中:
k 表示 该客人购买的物品价值 (以十进制计算的价格)
n 表示该客人的幸运数字
m 表示 该客人所在国度的采用的进制
三、输出描述
输出幸运数字的个数,行未无空格。
1、输入
10 2 4
2、输出
2
3、说明
10用4进制表示时为22,同时,异国客人的幸运数字是2,故而此处输出为2,表示有2个幸运数字。
四、解题思路
我们需要将十进制数 k 转换为 m 进制,然后统计其中等于幸运数字 n 的个数。具体步骤如下:
- 将十进制数 k 转换为 m 进制:
- 使用除基取余法,直到 k 为0,将每次的余数记录下来。
- 将记录的余数反向排列,即为 m 进制表示。
- 统计幸运数字的个数:
- 遍历 m 进制表示的数字,统计其中等于 n 的数字个数。
- 输出结果:输出幸运数字的个数。
五、Python算法源码
def convert_to_base_m(k, m):"""将十进制数 k 转换为 m 进制表示"""m_base_number = []while k > 0:remainder = k % mm_base_number.append(str(remainder))k //= mreturn ''.join(m_base_number[::-1])def count_lucky_numbers(m_base_number, n):"""统计 m 进制表示中幸运数字 n 的个数"""count = 0lucky_digit = str(n)for digit in m_base_number:if digit == lucky_digit:count += 1return countdef main():# 读取输入的 k, n, mk = int(input("输入十进制数 k:"))n = int(input("输入幸运数字 n:"))m = int(input("输入目标进制 m:"))# 将十进制数 k 转换为 m 进制m_base_number = convert_to_base_m(k, m)# 统计幸运数字 n 的个数lucky_number_count = count_lucky_numbers(m_base_number, n)# 输出结果print(lucky_number_count)if __name__ == "__main__":main()
六、JavaScript算法源码
// 将十进制数 k 转换为 m 进制表示
function convertToBaseM(k, m) {let mBaseNumber = [];while (k > 0) {let remainder = k % m;mBaseNumber.push(remainder);k = Math.floor(k / m);}return mBaseNumber.reverse().join('');
}// 统计 m 进制表示中幸运数字 n 的个数
function countLuckyNumbers(mBaseNumber, n) {let count = 0;let luckyDigit = n.toString();for (let digit of mBaseNumber) {if (digit === luckyDigit) {count++;}}return count;
}function main() {// 读取输入let k = parseInt(prompt("输入十进制数 k:"));let n = parseInt(prompt("输入幸运数字 n:"));let m = parseInt(prompt("输入目标进制 m:"));// 将十进制数 k 转换为 m 进制let mBaseNumber = convertToBaseM(k, m);// 统计幸运数字 n 的个数let luckyNumberCount = countLuckyNumbers(mBaseNumber, n);// 输出结果console.log(luckyNumberCount);
}// 运行程序
main();
七、C算法源码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>// 将十进制数 k 转换为 m 进制表示
void convert_to_base_m(int k, int m, char* m_base_number) {int index = 0;while (k > 0) {int remainder = k % m;m_base_number[index++] = remainder + '0'; // 转换为字符k /= m;}m_base_number[index] = '\0';// 逆序数组for (int i = 0; i < index / 2; i++) {char temp = m_base_number[i];m_base_number[i] = m_base_number[index - 1 - i];m_base_number[index - 1 - i] = temp;}
}// 统计 m 进制表示中幸运数字 n 的个数
int count_lucky_numbers(const char* m_base_number, int n) {int count = 0;char lucky_digit = n + '0'; // 转换为字符for (int i = 0; i < strlen(m_base_number); i++) {if (m_base_number[i] == lucky_digit) {count++;}}return count;
}int main() {int k, n, m;// 读取输入printf("输入十进制数 k: ");scanf("%d", &k);printf("输入幸运数字 n: ");scanf("%d", &n);printf("输入目标进制 m: ");scanf("%d", &m);// 存储 m 进制表示char m_base_number[64]; // 假设最大为 64 位// 将十进制数 k 转换为 m 进制convert_to_base_m(k, m, m_base_number);// 统计幸运数字 n 的个数int lucky_number_count = count_lucky_numbers(m_base_number, n);// 输出结果printf("%d\n", lucky_number_count);return 0;
}
八、C++算法源码
#include <iostream>
#include <string>
#include <algorithm> // 用于reverse函数
using namespace std;// 将十进制数 k 转换为 m 进制表示
string convert_to_base_m(int k, int m) {string m_base_number;while (k > 0) {int remainder = k % m;m_base_number += to_string(remainder); // 将数字转换为字符串并追加到结果k /= m;}reverse(m_base_number.begin(), m_base_number.end()); // 逆序数组return m_base_number;
}// 统计 m 进制表示中幸运数字 n 的个数
int count_lucky_numbers(const string& m_base_number, int n) {int count = 0;char lucky_digit = '0' + n; // 将幸运数字转换为字符for (char digit : m_base_number) {if (digit == lucky_digit) {count++;}}return count;
}int main() {int k, n, m;// 读取输入cout << "输入十进制数 k: ";cin >> k;cout << "输入幸运数字 n: ";cin >> n;cout << "输入目标进制 m: ";cin >> m;// 将十进制数 k 转换为 m 进制string m_base_number = convert_to_base_m(k, m);// 统计幸运数字 n 的个数int lucky_number_count = count_lucky_numbers(m_base_number, n);// 输出结果cout << lucky_number_count << endl;return 0;
}
🏆下一篇:华为OD机试真题 - 简易内存池(Python/JS/C/C++ 2024 E卷 200分)
🏆本文收录于,华为OD机试真题(Python/JS/C/C++)
刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新,全天CSDN在线答疑。