MT1421-MT1430 码题集 (c 语言详解)

目录

MT1421·异或

MT1422·总位数

MT1423·被3整除

MT1424·卡特兰序列

MT1425·小码哥的序列

MT1426·普洛尼克数

MT1427·素数序列

MT1428·最小素数因子

MT1429·最小正整数

MT1430·回文数组


MT1421·异或

给定一个由N(<1000)个整数组成的数组,把数组元素任意两两进行异或,统计数组中异或的结果为奇数的元素有几对,输出对数。

格式

输入格式:第一行输入数组长度N,第二行输入数组元素,整型,空格分隔。

输出格式:输出整型

样例 1

输入:3

1 2 3

输出:2

c 语言实现代码

方法一:

#include <stdio.h>
int main() {
    int N;
    scanf("%d", &N);
    int array[100];
    for (int i = 0; i < N; i++) {
        scanf("%d", &array[i]);
    }
    // method one:

    int count_odd = 0;
    int count_even = 0;
    for (int i = 0; i < N; i++) {
        if (array[i] % 2 == 0) {
            count_even++;
         } else {
            count_odd++;
         }
     }
    int pairs = count_odd * count_even;
    printf("%d", pairs);

    return 0;
}

方法二:

#include <stdio.h>
int main() {
    int N;
    scanf("%d", &N);
    int array[100];
    for (int i = 0; i < N; i++) {
        scanf("%d", &array[i]);
    }
    int count = 0;
    // 计算异或结果为奇数的对数
    for (int i = 0; i < N - 1; i++) {
        for (int j = i + 1; j < N; j++) {
            if ((array[i] ^ array[j]) % 2 != 0) {
                count++;
            }
        }
    }
    printf("%d", count);
    return 0;
}

MT1422·总位数

计算数组中N个元素所有数字的总位数。所有元素均为非负数。

格式

输入格式:第一行输入数组长度N(<100),第二行输入数组元素,整型,空格分隔。

输出格式:输出整型

样例 1

输入:14

1 2 3 4 5 6 7 8 9 10 11 12 13 14

输出:19

c 语言实现代码

#include <stdio.h>

int main() {
    int N;
    scanf("%d", &N);
    int array[N];

    // 输入数组元素
    for (int i = 0; i < N; i++) {
        scanf("%d", &array[i]);
    }

    int total_digits = 0;
    for (int i = 0; i < N; i++) {
        int num = array[i];
        if (num == 0) {
            total_digits++;
        }
        while (num > 0) {
            total_digits++;
            num /= 10;
        }
    }

    // 输出结果
    printf("%d\n", total_digits);
    return 0;
}

MT1423·被3整除

c 语言实现代码

#include <stdio.h>
int main() {
    int N;
    scanf("%d", &N);
    int array[N];
    for (int i = 0; i < N; i++) {
        scanf("%d", &array[i]);
    }

    int total_digits_sum = 0;
    for (int i = 0; i < N; i++) {
        int num = array[i];
        while (num > 0) {
            total_digits_sum += num % 10; // 取出最后一位数字并加到总和
            num /= 10;                    // 去掉最后一位数字
        }
    }
    if (total_digits_sum % 3 == 0) {
        printf("YES");
    } else {
        printf("NO");
    }

    return 0;
}

MT1424·卡特兰序列

c 语言实现代码

#include <stdio.h>
int main() {
    int N;
    scanf("%d", &N);
    if (N > 20)
        return 0;
    int catalan[N + 1];
    catalan[0] = 1;
    // 使用动态规划计算卡特兰数
    for (int i = 1; i <= N; i++) {
        catalan[i] = 0;
        for (int j = 0; j < i; j++) {
            catalan[i] += catalan[j] * catalan[i - 1 - j];
        }
    }

    printf("%d", catalan[N]);

    return 0;
}

MT1425·小码哥的序列

c 语言实现代码

#include <stdio.h>

int main() {
    int N;
    scanf("%d", &N);

    // 如果N小于1,直接返回
    if (N < 1) {
        printf("N必须大于或等于1。\n");
        return 1;
    }

    // 序列的前几项
    int sequence[10000]; // 假设最大为100项
    sequence[0] = 1;   // 第1项
    sequence[1] = 2;   // 第2项
    sequence[2] = 5;   // 第2项

    // 根据规律生成序列,直到第N项
    for (int i = 3; i < N; i++) {
        sequence[i] = sequence[i - 1] + sequence[i - 2] + sequence[i - 3];
    }

    // 输出第N项
    printf("%d\n", sequence[N - 1]);
    return 0;
}

MT1426·普洛尼克数

c 语言实现代码

#include <stdio.h>
int main() {
    int N;
    scanf("%d", &N);

    for (int i = 0;; i++) {
        int plonikNumber = i * (i + 1);
        if (plonikNumber > N) {
            break;
        }
        printf("%d ",plonikNumber);
    }

    return 0;
}

MT1427·素数序列

c 语言实现代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_SIZE 10000

int isPrimeDigit(int num) {
    while (num > 0) {
        int digit = num % 10;
        if (digit != 2 && digit != 3 && digit != 5 && digit != 7) {
            return 0;
        }
        num /= 10;
    }
    return 1;
}

int main() {
    int N;
    scanf("%d", &N);
    int count = 0;
    int number = 1;

    while (count < N) {
        if (isPrimeDigit(number)) {
            count++;
        }
        number++; /*  */
    }

    printf("%d", number - 1);

    return 0;
}

MT1428·最小素数因子

c 语言实现代码

#include <stdio.h>
int main() {
    int N;
    scanf("%d", &N);
    if (N <= 0 || N > 1000)
        return 0;
    int minmum_prime_factor[1001];
    // 初始化数组
    for (int i = 1; i <= N; i++) {
        if (i == 1) {
            minmum_prime_factor[i] = 1;
        }
        minmum_prime_factor[i] = i;
    }

    // 计算最小素数因子
    for (int i = 2; i <= N; i++) {
        if (minmum_prime_factor[i] == i) {
            for (int j = 2 * i; j <= N; j += i) {
                if (minmum_prime_factor[j] == j) {
                    minmum_prime_factor[j] = i;
                }
            }
        }
    }

    for (int i = 1; i <= N; i++) {
        printf("%d ", minmum_prime_factor[i]);
    }

    return 0;
}

MT1429·最小正整数

c 语言实现代码

#include <math.h>
#include <stdio.h>

int main() {
    int N;
    scanf("%d", &N);

    int arr[N];
    for (int i = 0; i < N; i++) {
        scanf("%d", &arr[i]);
    }
    //  method 1:
    // // 计算数组的乘积 P
    // double product = 1;
    // for (int i = 0; i < N; i++) {
    //     product *= arr[i];
    // }

    // // 找到最小的 K,使得 K^N > product
    // int K = 1;
    // while (pow(K, N) <= product) {
    //     K++;
    // }

    // printf("%d\n", K);

    //  method 2:
    double log_product = 0;
    for (int i = 0; i < N; i++) {
        log_product += log(arr[i]);
    }

    // 计算 k 的下界
    double log_k = log_product / N;
    int k = (int)ceil(exp(log_k));

    while (pow(k, N) <= exp(log_product)) {
        k++;
    }
    printf("%d", k);

    return 0;
}

MT1430·回文数组

c 语言实现代码

#include <stdio.h>
#include <string.h>

int isPalindrome(int num) {
    char str[10];
    sprintf(str, "%d", num);
    int len = strlen(str);
    for (int i = 0; i < len / 2; i++) {
        if (str[i] != str[len - i - 1]) {
            return 0; // 不是回文数
        }
    }
    return 1; // 是回文数
}
int main() {
    int N;
    scanf("%d", &N);
    int count = 0; // 计数
    for (int i = 1; i < N; i++) {
        if (isPalindrome(i)) {
            count++;
        }
    }
    printf("%d", count);
    return 0;
}
相关推荐
VertexGeek几秒前
Rust学习(八):异常处理和宏编程:
学习·算法·rust
石小石Orz1 分钟前
Three.js + AI:AI 算法生成 3D 萤火虫飞舞效果~
javascript·人工智能·算法
湫ccc7 分钟前
Python简介以及解释器安装(保姆级教学)
开发语言·python
程序伍六七11 分钟前
day16
开发语言·c++
wkj00116 分钟前
php操作redis
开发语言·redis·php
极客代码21 分钟前
【Python TensorFlow】进阶指南(续篇三)
开发语言·人工智能·python·深度学习·tensorflow
土豆湿26 分钟前
拥抱极简主义前端开发:NoCss.js 引领无 CSS 编程潮流
开发语言·javascript·css
小陈phd28 分钟前
Vscode LinuxC++环境配置
linux·c++·vscode
界面开发小八哥33 分钟前
更高效的Java 23开发,IntelliJ IDEA助力全面升级
java·开发语言·ide·intellij-idea·开发工具
二进制_博客37 分钟前
Flink学习连载文章4-flink中的各种转换操作
大数据·学习·flink