3、计算字符串中含有的不同字符的个数
编写一个函数,计算字符串中含有的不同字符的个数。字符在 ASCII 码范围内( 0~127 ,包括 0 和 127 ),换行表示结束符,不算在字符里。不在范围内的不作统计。多个相同的字符只计算一次。
例如,对于字符串 abaca 而言,有 a、b、c 三种不同的字符,因此输出 3 。
#include <stdio.h>
int count_distinct_chars(char* s) {
// 布尔型数组,记录每个字符是否已经出现过
bool seen[128] = { false };
int count = 0;
// 遍历字符串中的每个字符
while (*s != '\0') {
// 如果字符在 ASCII 码范围内且未出现过
if (*s >= 0 && *s < 128 && !seen[*s]) {
seen[*s] = true;
count++;
}
s++;
}
return count;
}
int main() {
char s[] = "abaca";
printf("%d\n", count_distinct_chars(s)); // 输出 3
return 0;
}
4、从键盘输入两个数字n,m,求解m和n的最小公倍数。
最小公倍数(Least Common Multiple,简称 LCM)指的是两个或多个整数公有的倍数中最小的一个。求两个数字n和m的最小公倍数可以按照以下步骤进行:
- 从键盘输入两个数字 n 和 m。
- 计算 n 和 m 的最大公约数(Greatest Common Divisor,简称 GCD)。
- 根据公式 LCM(n, m) = n * m / GCD(n, m) 计算 n 和 m 的最小公倍数。
- 输出结果。
以下是 C 语言实现代码:
#include <stdio.h>
// 求两个数的最大公约数
int gcd(int a, int b) {
if (b == 0) {
return a;
} else {
return gcd(b, a % b);
}
}
int main() {
int n, m, lcm;
printf("请输入两个数字n和m:");
scanf("%d%d", &n, &m);
// 计算最小公倍数
lcm = n * m / gcd(n, m);
printf("%d和%d的最小公倍数是%d。\n", n, m, lcm);
return 0;
}