MT1401-MT1410 码题集 (c 语言详解)

news2024/11/29 16:43:47

目录

        MT1401·归并排序

        MT1402·堆排序

        MT1403·后3位排序

        MT1404·小大大小排序

        MT1405·小大大小排序II

        MT1406·数字重排

        MT1407·插入

        MT1408·插入

        MT1409·旋转数组

        MT1410·逆时针旋转数组


MT1401·归并排序

c 语言实现代码

#include <stdio.h>

// merge two subarrays
void merge(int arr[], int left, int mid, int right) {
    int i, j, k;
    int n1 = mid - left + 1; // left sonArray
    int n2 = right - mid;    // right sonArray

    // create new array
    int L[n1], R[n2];

    for (i = 0; i < n1; i++) {
        L[i] = arr[left + i];
    }
    for (j = 0; j < n2; j++) {
        R[j] = arr[mid + 1 + j];
    }

    i = 0;
    j = 0;
    k = left;

    while (i < n1 && j < n2) {
        if (L[i] <= R[j]) {
            arr[k] = L[i];
            i++;
        } else {
            arr[k] = R[j];
            j++;
        }
        k++;
    }
    while (i < n1) {
        arr[k] = L[i];
        i++;
        k++;
    }

    while (j < n2) {
        arr[k] = R[j];
        j++;
        k++;
    }
}

void mergeSort(int arr[], int left, int right) {
    if (left < right) {
        int mid = left + (right - left) / 2;
        mergeSort(arr, left, mid);
        mergeSort(arr, mid + 1, right);

        merge(arr, left, mid, right);
    }
}

int main() {
    int arr[10];
    for (int i = 0; i < 10; i++) {
        scanf("%d", &arr[i]);
    }

    mergeSort(arr, 0, 10 - 1);

    for (int i = 0; i < 10; i++) {
        printf("%d ", arr[i]);
    }

    return 0;
}

MT1402·堆排序

 

c 语言实现代码

#include <stdio.h>

// swap two element vlaue
void swap(int *a, int *b) {
    int temp = *a;
    *a = *b;
    *b = temp;
}

void heapify(int arr[], int n, int i) {
    int largest = i;       // root 节点
    int left = 2 * i + 1;  // 左子节点
    int right = 2 * i + 2; // 右子节点

    if (left < n && arr[left] > arr[largest]) {
        largest = left;
    }

    if (right < n && arr[right] > arr[largest]) {
        largest = right;
    }

    if (largest != i) {
        swap(&arr[i], &arr[largest]);
        heapify(arr, n, largest);
    }
}

void heapSort(int arr[], int n) {
    for (int i = n / 2 - 1; i >= 0; i--) {
        heapify(arr, n, i);
    }

    for (int i = n - 1; i >= 0; i--) {
        swap(&arr[0], &arr[i]);
        heapify(arr, i, 0);
    }
}

int main() {
    int arr[10];
    for (int i = 0; i < 10; i++) {
        scanf("%d", &arr[i]);
    }

    heapSort(arr, 10);

    for (int i = 0; i < 10; i++) {
        printf("%d ", arr[i]);
    }

    return 0;
}

MT1403·后3位排序

 

c 语言代码实现

#include <stdio.h>
#include <stdlib.h>
#define N 10

int compare(const void *a, const void *b) {
    int num1 = *(int *)a;
    int num2 = *(int *)b;

    int last_1 = num1 % 1000;
    int last_2 = num2 % 1000;

    if (last_1 != last_2) {
        return last_1 - last_2;
    } else {
        return num2 - num1;
    }
}

int main() {
    int numbers[N];
    for (int i = 0; i < N; i++) {
        scanf("%d", &numbers[i]);
    }
    qsort(numbers, N, sizeof(10), compare);

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

    return 0;
}

MT1404·小大大小排序

 

c 语言代码实现 

#include <stdio.h>
#include <stdlib.h>

#define SIZE 10

// 升序排序的比较函数
int ascending(const void *a, const void *b) { return (*(int *)a - *(int *)b); }

// 反转函数 用于将下标N到M的元素反转
void reverse(int arr[], int start, int end) {
    while (start < end) {
        int temp = arr[start];
        arr[start] = arr[end];
        arr[end] = temp;
        start++;
        end--;
    }
}

int main() {
    int arr[SIZE];
    int N, M;
    for (int i = 0; i < SIZE; i++) {
        scanf("%d", &arr[i]);
    }
    scanf("%d %d", &N, &M);
    // 对整个数组进行升序排序
    qsort(arr, SIZE, sizeof(int), ascending);
    // 反转下标 N 到 M 的部分
    reverse(arr, N, M);
    for (int i = 0; i < SIZE; i++) {
        printf("%d ", arr[i]);
    }

    return 0;
}

MT1405·小大大小排序II

 

c 语言代码实现

#include <stdio.h>
#include <stdlib.h>

#define SIZE 10

// 升序排序的比较函数
int ascending(const void *a, const void *b) { return (*(int *)a - *(int *)b); }

// 反转函数 用于将下标N到M的元素反转
void reverse(int arr[], int start, int end) {
    while (start < end) {
        int temp = arr[start];
        arr[start] = arr[end];
        arr[end] = temp;
        start++;
        end--;
    }
}

int main() {
    int arr[SIZE];
    int N;
    for (int i = 0; i < SIZE; i++) {
        scanf("%d", &arr[i]);
    }
    scanf("%d", &N);
    // 对整个数组进行升序排序
    qsort(arr, SIZE, sizeof(int), ascending);
    // 反转下标 N 到 M 的部分
    reverse(arr, N, SIZE - 1);
    for (int i = 0; i < SIZE; i++) {
        printf("%d ", arr[i]);
    }

    return 0;
}

MT1406·数字重排

这道题 c 案例一直出问题 有解决的可以在评论区d我

c 语言实现

#include <stdio.h>
#include <stdbool.h>

// 去重函数:从数组a中去重,结果存入数组b,返回去重后的长度
int del(int a[], int b[], int n) {
    int c = 0;
    for (int i = 0; i < n; i++) {
        bool flag = true;
        for (int j = 0; j < c; j++) {
            if (a[i] == b[j]) { // 如果a[i]已在b中,设置标志为false
                flag = false;
                break;
            }
        }
        if (flag) { // 如果a[i]不在b中,加入b
            b[c++] = a[i];
        }
    }
    return c;
}

// 排序函数
void sort(int arr[], int len) {
    for (int i = 0; i < len - 1; i++) {
        for (int j = 0; j < len - i - 1; j++) {
            if (arr[j] > arr[j + 1]) {
                int temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
}

int main() {
    int a, b, c, len = 0;

    // 输入三个数字
    scanf("%d %d %d", &a, &b, &c);

    int A[6], B[6];
    A[len++] = a * 100 + b * 10 + c;
    A[len++] = a * 100 + c * 10 + b;
    A[len++] = b * 100 + a * 10 + c;
    A[len++] = b * 100 + c * 10 + a;
    A[len++] = c * 100 + a * 10 + b;
    A[len++] = c * 100 + b * 10 + a;

    // 去重
    int newLen = del(A, B, len);

    // 排序
    sort(B, newLen);

    // 输出结果
    for (int i = 0; i < newLen; i++) {
        printf("%d\n", B[i]);
    }

    return 0;
}

MT1407·插入

 

c 语言实现代码

#include <stdio.h>
#define SIZE 10

void sort(int arr[], int len) {
    for (int i = 0; i < len - 1; i++) {
        for (int j = 0; j < len - i - 1; j++) {
            if (arr[j] > arr[j + 1]) {
                int temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
}

int insertPoistion(int arr[], int len, int n) {
    int left = 0;
    int right = len - 1;
    while (left <= right) {
        int mid = (left + right) / 2;
        if (arr[mid] < n) {
            left = mid + 1;
        } else {
            right = mid - 1;
        }
    }
    return left;
}

int main() {
    int arr[SIZE + 1], n;
    for (int i = 0; i < SIZE; i++) {
        scanf("%d", &arr[i]);
    }
    scanf("%d", &n);

    sort(arr, SIZE);

    int pos = insertPoistion(arr, SIZE, n);

    for (int i = SIZE; i > pos; i--) {
        arr[i] = arr[i - 1];
    }
    arr[pos] = n;

    for (int i = 0; i <= SIZE; i++) {
        printf("%d ", arr[i]);
    }

    return 0;
}

MT1408·插入

c 语言代码实现

#include <stdio.h>

int insertPosition(int arr[], int len, int n) {
    int left = 0;
    int right = len - 1;
    while (left <= right) {
        int mid = (left + right) / 2;
        if (arr[mid] < n) {
            left = mid + 1;
        } else {
            right = mid - 1;
        }
    }
    return left;
}

int main() {
    int N;
    int array[N + 1];
    int insertNumber;
    scanf("%d", &N);
    for (int i = 0; i < N; i++) {
        scanf("%d", &array[i]);
    }
    scanf("%d", &insertNumber);

    int pos = insertPosition(array, N, insertNumber);
    for (int i = N; i > pos; i--) {
        array[i] = array[i - 1];
    }
    array[pos] = insertNumber;

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

MT1409·旋转数组

 

c 语言代码实现

 

#include <stdio.h>

void rotate_array(int arr[], int length, int n) {
    // 处理 N 的值,确保在有效范围内
    n = n % length;  // 处理 N 大于数组长度的情况
    if (n < 0) {
        n += length;  // 将负数旋转转换为正数旋转
    }

    // 创建一个临时数组来存储旋转后的结果
    int temp[length];

    // 进行旋转
    for (int i = 0; i < length; i++) {
        temp[(i + n) % length] = arr[i];
    }

    // 将结果复制回原数组
    for (int i = 0; i < length; i++) {
        arr[i] = temp[i];
    }
}

int main() {
    int arr[10];
    int n;

    // 输入整型元素
    for (int i = 0; i < 10; i++) {
        scanf("%d", &arr[i]);
    }

    // 输入旋转次数 N
    scanf("%d", &n);

    // 旋转数组
    rotate_array(arr, 10, n);

    // 输出结果
    for (int i = 0; i < 10; i++) {
        printf("%d", arr[i]);
        if (i < 9) {
            printf(" ");  // 输出空格分隔
        }
    }
    printf("\n");

    return 0;
}

MT1410·逆时针旋转数组

c 语言实现代码

#include <stdio.h>

void rotateArrayCounterClockwise(int array[], int N, int M) {
    M = M % N; // 计算有效的旋转次数
    int result[N];

    // 将前 M 个元素放在新数组的末尾
    for (int i = 0; i < N - M; i++) {
        result[i] = array[M + i];
    }

    // 将前 M 个元素移动到新数组的开头
    for (int i = 0; i < M; i++) {
        result[N - M + i] = array[i];
    }

    // 将新数组的内容复制到原数组
    for (int i = 0; i < N; i++) {
        array[i] = result[i];
    }
}

int main() {
    int N, M;
    scanf("%d %d", &N, &M);
    int array[N];
    for (int i = 0; i < N; i++) {
        scanf("%d", &array[i]);
    }
    rotateArrayCounterClockwise(array, N, M);

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

    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2227129.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大数据日志处理框架ELK方案

介绍应用场景大数据ELK日志框架安装部署 一&#xff0c;介绍 大数据日志处理框架ELK&#xff08;Elasticsearch、Logstash、Kibana&#xff09;是一套完整的日志集中处理方案&#xff0c;以下是对其的详细介绍&#xff1a; 一、Elasticsearch&#xff08;ES&#xff09; 基本…

PHP海外矿物矿机理财投资源码-金融理财投资源码

PHP海外矿物矿机理财投资源码/金融理财投资源码 海外矿物矿机理财投资源码 测试不错,可以做其他产品理财,功能都没啥太大问题

Unity3D学习FPS游戏(1)获取素材、快速了解三维模型素材(骨骼、网格、动画、Avatar、材质贴图)

前言&#xff1a;最近重拾Unity&#xff0c;准备做个3D的FPS小游戏&#xff0c;这里以官方FPS案例素材作为切入。 导入素材和素材理解 安装Unity新建项目新建文件夹和Scene如何去理解三维模型素材找到模型素材素材预制体结构骨骼和网格材质&#xff08;Material&#xff09;、…

php反序列化漏洞典型例题

1.靶场环境 ctfhub-技能树-pklovecloud 引用题目&#xff1a; 2021-第五空间智能安全大赛-Web-pklovecloud 2.过程 2.1源代码 启动靶场环境&#xff0c;访问靶场环境&#xff0c;显示源码&#xff1a;直接贴在下面&#xff1a; <?php include flag.php; class pks…

【flask】 flask redis的使用

目的&#xff1a;如何使用在flask web项目中连接redis&#xff0c;并简单的使用 使用的库包&#xff1a;flask-redis pip install falsk-redis下面的写法是对项目代码进行模块化拆分的写法&#xff0c;在app.py中只进行对象的初始化等操作&#xff1b;exts.py中创建对象&…

【含文档】基于ssm+jsp的房屋中介服务平台(含源码+数据库+lw)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: apache tomcat 主要技术: Java,Spring,SpringMvc,mybatis,mysql,vue 2.视频演示地址 3.功能 系统定义了两个…

CI/CD 的原理

一、CI/CD 的概念 CI/CD是一种软件开发流程&#xff0c;旨在通过自动化和持续的集成、测试和交付实现高质量的软件产品。 CI(Continuous Integration)持续集成 目前主流的开发方式是协同开发&#xff0c;即多位开发人员同事处理同意应用不同模块或功能。 如果企业在同一时间将…

网络请求自定义header导致跨域问题

我记得我的项目之前已经解决了跨域问题。 后来在功能开发着&#xff0c;需要添加一个自定义的header&#xff0c;发现又出现跨域报错。 于是又开始一通摸索折腾。 我的项目前面端是用axios网络请求&#xff0c;通过拦截器添加header&#xff0c;代码如下&#xff1a; //添加请…

python实战项目47:Selenium采集百度股市通数据

python实战项目47:Selenium采集百度股市通数据 一、思路分析二、完整代码一、思路分析 这里以获取百度股市通股评下的投票数据为例,页面中的其他数据同理。由于此页面数据是js动态加载的,所以采用Selenium获取数据。思路很简单,通过Selenium打开页面,然后定位到“股评”选…

《使用Gin框架构建分布式应用》阅读笔记:p212-p233

《用Gin框架构建分布式应用》学习第12天&#xff0c;p212-p233总结&#xff0c;总22页。 一、技术总结 1.JavaScript知识点 (1)class、method (2)function, arrow function, (3)fetch() (4)Promise, then() 2.bootstrap 第5章主要涉及前端技术的运用&#xff0c;作为后…

nfs作业

nfs作业 服务机&#xff1a; 编写配置文件&#xff1a; [rootlocalhost ~]# vim /etc/exports 配置文件内容&#xff1a; /nfs/shared *(ro,sync) /nfs/upload 192.168.36.0/24(rw,anonuid210,anongid210,sync) /home/tom 192.168.36.132(rw) 创建目录&#xff0c;文件&am…

紫杉醇的药物代谢-文献精读73

Hydrogen-Bond-Assisted Catalysis: Hydroxylation of Paclitaxel by Human CYP2C8 氢键辅助催化&#xff1a;人类CYP2C8对紫杉醇的羟基化 摘要 紫杉醇&#xff08;PTX&#xff0c;或称Taxol&#xff09;是一种广泛用于治疗多种癌症的化疗药物&#xff0c;经过细胞色素P450酶…

使用语言模型进行文本摘要的五个级别(llm)

视频链接&#xff1a;5 Levels Of LLM Summarizing: Novice to Expert

A Simple Semi-Supervised Learning Framework for Object Detection

1. Introduction SSL的成功主要有以下两个方面&#xff1a; &#xff08;1&#xff09;一致性正则化&#xff1a;如果对一个未标记的数据应用实际的扰动, 其预测结果不应该发生显著变化, 也就是输出具有一致性&#xff0c;通过在未标记数据上构造添加扰动后的预测结果 y~​ 与…

景区客流统计合理控制游客人数,预防意外发生

随着制造业的不断发展&#xff0c;工厂的管理和安全问题日益受到关注。为了提升生产效率和保障安全&#xff0c;许多工厂开始采用客流计数器系统。这种系统通过实时监测和控制车间内的人员数量&#xff0c;确保不超过安全规定&#xff0c;预防事故发生。本文将详细介绍工厂客流…

正则表达式以及密码匹配案例手机号码脱敏案例

目录 正则表达式 什么是正则表达式 语法 定义变量 test方法 exec方法 replace方法 match方法 修饰符 元字符 边界符 单词边界 字符串边界 边界符&#xff1a;^ 边界符&#xff1a;$ 量词 * ? {n} {n,} {n,m} 字符类 []匹配字符集合 .匹配除换行符之外的…

面向对象编程中类与类之间的关系(一)

目录 1.引言 2."有一个"关系 3."是一个"关系(继承) 4.“有一个”与“是一个”的区别 5.not-a关系 6.层次结构 7.多重继承 8.混入类 1.引言 作为程序员&#xff0c;必然会遇到这样的情况&#xff1a;不同的类具有共同的特征&#xff0c;至少看起来彼…

【zotero7】茉莉花抓取文献失败解决方案

1、先安装好茉莉花 工具 ----》设置按钮–》从github上下载 xpi文件 2. 配置茉莉花 选择设置–》看到茉莉花–》红色字体 pdftk下载链接&#xff1a; https://www.pdflabs.com/tools/pdftk-server/ 3.打开插件 --》扩展插件 刷新

如何从PPT中导出600dpi的高清图

Step1. 修改PPT注册表 具体过程&#xff0c;参见如下链接&#xff1a;修改ppt注册表&#xff0c;导出高分辨率图片 Step2. 打开PPT&#xff0c;找到自己想要保存的图&#xff0c;选中图像&#xff0c;查看图像尺寸并记录 Step3. 重新新建一个PPT&#xff0c;并根据记录的图片…

C语言 | Leetcode C语言题解之第518题零钱兑换II

题目&#xff1a; 题解&#xff1a; int change(int amount, int* coins, int coinsSize) {int dp[amount 1];bool valid[amount 1];memset(dp, 0, sizeof(dp));memset(valid, false, sizeof(valid));dp[0] 1;valid[0] true;for (int i 0; i < coinsSize; i) {for (in…