欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 金融 > 华为OD机试 - 幸运数字(Python/JS/C/C++ 2024 D卷 100分)

华为OD机试 - 幸运数字(Python/JS/C/C++ 2024 D卷 100分)

2025/2/23 16:41:04 来源:https://blog.csdn.net/guorui_java/article/details/142226861  浏览:    关键词:华为OD机试 - 幸运数字(Python/JS/C/C++ 2024 D卷 100分)

在这里插入图片描述

华为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 的个数。具体步骤如下:

  1. 将十进制数 k 转换为 m 进制:
    • 使用除基取余法,直到 k 为0,将每次的余数记录下来。
    • 将记录的余数反向排列,即为 m 进制表示。
  2. 统计幸运数字的个数:
    • 遍历 m 进制表示的数字,统计其中等于 n 的数字个数。
  3. 输出结果:输出幸运数字的个数。

五、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在线答疑。

在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词