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;
}
相关推荐
水蓝烟雨7 分钟前
[数组排序] 0169. 多数元素
算法·leetcode·数组排序
Python大数据分析@10 分钟前
学习python中的pandas有没有好的教程推荐?
python·学习·pandas
hxj..12 分钟前
【算法】动态规划
java·算法·动态规划
MessiGo22 分钟前
C/C++ 知识点:重载、覆盖和隐藏
c++
世间万物皆对象25 分钟前
Java 基础教学:高级特性与实战-集合框架
java·开发语言
想做白天梦26 分钟前
LeetCode:102. 二叉树的层序遍历(java)
数据结构·算法
青椒大仙KI1128 分钟前
24/11/5 算法笔记adagrad 自适应学习率
笔记·学习·算法
不爱吃米饭_29 分钟前
如何优雅处理异常?处理异常的原则
java·开发语言·spring boot
豆本-豆豆奶1 小时前
给初学者的 Jupyter Notebook 教程
开发语言·python·jupyter·安装教程·notebook
K1t01 小时前
dns欺骗
开发语言·网络·php