day02 字符串 最小公倍数

91 阅读1分钟

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的最小公倍数可以按照以下步骤进行:

  1. 从键盘输入两个数字 n 和 m。
  2. 计算 n 和 m 的最大公约数(Greatest Common Divisor,简称 GCD)。
  3. 根据公式 LCM(n, m) = n * m / GCD(n, m) 计算 n 和 m 的最小公倍数。
  4. 输出结果。

以下是 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;
}