C语言实现查找最接近的漂亮数
使用 C 语言查找最接近的漂亮数
问题描述:
假设给定两个整数 N 和 K。 一个数字 M 被称为最接近 N 的漂亮数,当且仅当满足同时满足以下两个条件:
- N ≤ M 。
- M 的所有数位有不超过 K 种数字。
比方说,当 N = 2021, K = 2 时,最接近 N 的漂亮数 M 就是 2022 ,因为 2022 的所有数位只有两种数字 0 和 2 ,且 N ≤ M 成立。 再比如,当 N = 20210929, K = 3 时,最接近 N 的漂亮数 M 就是 20211000,因为 20211000 的所有数位只有三种数字 0 、 1 和 2,且 N ≤ M 成立。
请你找出最接近 N 的漂亮数 M。
输入
第一行输入一个正整数 T ,表示有 T(1 ≤ T ≤ 10^4) 组测试数据; 随后的 T 行,每行输入两个正整数 N 和 K , N 和 K 之间用空格隔开。 并且对于每组测试数据,我们保证 1 ≤ N ≤ 10^9, 1 ≤ K ≤ 10。
输出
一共 T 行,每一行输出该测试数据的最接近 N 的漂亮数内容:
为了解决这个问题,我们可以按照以下步骤进行操作:
- 首先,我们需要编写一个函数来检查一个数字是否是漂亮数。该函数将接受一个整数 M 和一个整数 K 作为参数,然后检查 M 的所有数位是否不超过 K 种数字。如果满足条件,函数将返回 true;否则,返回 false。
#include <stdbool.h>
#include <stdio.h>
bool isBeautiful(int M, int K) {
int count[10] = {0}; // 用于记录数字出现的次数
while (M > 0) {
int digit = M % 10;
count[digit]++;
M /= 10;
}
int digitCount = 0; // 记录数字的种类数
for (int i = 0; i < 10; i++) {
if (count[i] > 0) {
digitCount++;
}
}
return digitCount <= K;
}
- 然后,我们可以编写一个函数来查找最接近 N 的漂亮数。该函数将接受一个整数 N 和一个整数 K 作为参数,然后从 N 开始递增查找漂亮数 M,直到找到最接近 N 的漂亮数为止。找到漂亮数后,将其保存到一个变量中,然后返回该变量的值。
int findBeautifulNumber(int N, int K) {
int M = N;
while (true) {
if (isBeautiful(M, K)) {
return M;
}
M++;
}
}
- 最后,我们可以根据输入的测试数据,调用上述函数来解决每个测试案例,并输出结果。
int main() {
int T;
scanf("%d", &T);
for (int i = 0; i < T; i++) {
int N, K;
scanf("%d %d", &N, &K);
int M = findBeautifulNumber(N, K);
printf("%d\n", M);
}
return 0;
}
通过以上步骤,我们就可以使用 C 语言编写一个解决该问题的程序。请注意,在实际使用时,你可能需要根据你的编译器和输入输出要求进行适当的修改。
原文地址: https://www.cveoy.top/t/topic/8oW 著作权归作者所有。请勿转载和采集!