跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
C算法

C 语言初阶算法习题实战解析

整理 C 语言初阶算法习题,包含两数之和、珠玑妙算、寻找奇数、截取字符串及寻找峰值五个案例。内容涉及动态内存分配、字符串字符匹配、异或运算特性、标准库函数使用及数组边界处理。通过具体代码实现与逻辑分析,帮助读者掌握基础数据结构操作与常见算法解题思路。

静心发布于 2026/3/16更新于 2026/6/516 浏览
C 语言初阶算法习题实战解析

C 语言初阶算法习题实战解析

这里整理了五道经典的 C 语言算法题,涵盖了数组操作、字符串处理以及位运算技巧。我们直接切入核心逻辑,看看在实际编码中如何高效解决这些问题。

一、两数之和

题目要求在一个有序数组中找到两个数,使它们的和等于目标值,并返回它们的下标(从 1 开始)。

思路很直接,双重循环遍历即可。不过要注意内存分配,因为需要返回一个动态数组。另外,如果当前数字已经大于目标值,可以直接跳过,毕竟数组是有序的。

int* twoSum(int* numbers, int numbersLen, int target, int* returnSize) {
    int* ret = (int*)malloc(sizeof(int) * numbersLen);
    for (int i = 0; i < numbersLen; i++) {
        if (numbers[i] > target) continue;
        for (int j = i + 1; j < numbersLen; j++) {
            int sum = numbers[i] + numbers[j];
            if (sum == target) {
                ret[0] = i + 1;
                ret[1] = j + 1;
                *returnSize = 2;
                return ret;
            }
        }
    }
    return NULL;
}

二、珠玑妙算

这道题类似于猜数字游戏,需要统计完全匹配(位置和内容都对)和部分匹配(内容对但位置不对)的数量。

关键点在于避免重复计算。我们可以先标记完全匹配的位置,将其替换为特殊字符(如'0'),这样在后续查找部分匹配时就不会再次计入。

int* masterMind(char* solution, char* guess, int* returnSize) {
    int* ret = (int*)malloc(sizeof(int) * 2);
    ret[0] = 0; ret[1] = 0;
    int len = strlen(solution);
    
    // 统计完全匹配
    for (int i = 0; i < len; i++) {
        if (solution[i] == guess[i]) {
            ret[0]++;
            solution[i] = guess[i] = '0';
        }
    }
    
    // 统计部分匹配
    for (int i = 0; i < len; i++) {
        for (int j = 0; j < len; j++) {
            if (solution[i] == guess[j] && solution[i] != '0') {
                ret[1]++;
                solution[i] = guess[j] = '0';
                break;
            }
        }
    }
    *returnSize = 2;
    return ret;
}

三、寻找奇数

这道题考察的是异或运算的性质。任何数字与自身异或结果为 0,与 0 异或结果为自身。因此,将数组中所有数字依次异或,成对出现的数字会相互抵消,最终剩下的就是那个唯一不重复的数字。

#include <stdio.h>

int main() {
    int n;
    scanf("%d", &n);
    int ret = 0;
    int m = 0;
    for (int i = 0; i < n; i++) {
        scanf("%d", &m);
        ret ^= m;
    }
    printf("%d\n", ret);
    return 0;
}

四、截取字符串

截取字符串有两种常见方法:一是使用标准库函数 strncpy,二是直接将截断位置设置为字符串结束符 \0。后者更简洁,适合简单场景。

// 方法一:使用 strncpy
#include <stdio.h>
#include <string.h>

int main() {
    char str[100];
    scanf("%s", str);
    int n;
    scanf("%d", &n);
    char ret[100];
    strncpy(ret, str, n);
    ret[n] = '\0';
    printf("%s\n", ret);
    return 0;
}

// 方法二:直接修改结束标志
#include <stdio.h>

int main() {
    char str[1000];
    scanf("%s", str);
    int n = 0;
    scanf("%d", &n);
    str[n] = '\0';
    printf("%s\n", str);
    return 0;
}

五、寻找峰值

寻找峰值元素时,边界情况最容易出错。我们需要单独检查首尾元素,然后再遍历中间部分。只要找到一个比左右邻居都大的元素,即为峰值。

int findPeakElement(int* nums, int numsLen) {
    // 处理边界情况
    if (numsLen <= 1) return 0;
    if (nums[0] > nums[1]) return 0;
    if (nums[numsLen - 1] > nums[numsLen - 2]) return numsLen - 1;
    
    // 遍历中间元素
    for (int i = 1; i < numsLen - 1; i++) {
        if (nums[i] > nums[i - 1] && nums[i] > nums[i + 1]) {
            return i;
        }
    }
    return -1;
}

以上便是这五道题的完整解析。算法的核心往往不在于代码长短,而在于对数据结构的理解和边界条件的把控。希望这些示例能为你接下来的练习提供一点参考。

目录

  1. C 语言初阶算法习题实战解析
  2. 一、两数之和
  3. 二、珠玑妙算
  4. 三、寻找奇数
  5. 四、截取字符串
  6. 五、寻找峰值
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 基于指数预定义时间控制的固定翼无人机轨迹跟踪控制与 Matlab 仿真
  • 大模型 AI Agent 在企业应用中的 6 种基础类型
  • 可解释人工智能:从经典模型到大规模语言模型全解析
  • FreeBSD 下使用 BVCP 管理 bhyve 虚拟机(上)
  • C++ 面向对象编程:深入解析继承机制
  • 深入理解 LRU 与 LFU 缓存算法实现
  • C++ 静态成员与非静态成员详解
  • LiuJuan Z-Image Generator 本地部署与 8K 人像生成指南
  • Java 数据结构:从树形结构到二叉树详解
  • Ollama+Llama-3.2-3B 实战:零代码搭建文本生成服务
  • OpenMAIC:清华开源 AI 课堂生成平台体验
  • 5 款开源 PPT 生成大模型实测对比与技术选型
  • 扩散模型原理与图像生成实战
  • C++ CAS 原子操作详解与 ABA 问题解决方案
  • 项目管理基础:核心定义、干系人与九大知识域
  • 大模型提示词进阶指南:System Prompts 与数据集分析
  • Spring Boot 4.0 核心新特性解析与实操指南
  • WebView 并发初始化竞争风险分析
  • 世界模型发展脉络综述:理解世界与预测未来
  • Python 与 PyCharm 虚拟环境搭建及实战指南

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online