【C语言】初阶算法相关习题(二)

【C语言】初阶算法相关习题(二)


个人主页:夜晚中的人海

在这里插入图片描述

文章目录

⭐一、两数之和

题目描述:两数之和

在这里插入图片描述

解题思路:
1.先创建一个动态分配的数组ret,用于存储结果,其大小为numbersLen

2.使用一个外层循环遍历数组numbers,循环变量i从0到numbersLen - 1。如果当前值大于目标值,则跳过当前循环

3.对于每个i,使用一个内层循环从i + 1到numbersLen - 1,循环变量j用于查找与numbers[i]相加等于target的另一个数字

4.若sum等于目标值target,则找到了满足条件的两个数字。将下标i和下标j分别+1存储到ret数组中*(题目要求下标从1开始)

5.设置returnSize为2,表示返回数组的大小,最后返回目标数组ret。若遍历完数组都没找到满足条件的两个数字,则返回0

代码实现:

int*twoSum(int* numbers,int numbersLen,int target,int* returnSize ){// write code hereint* 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;}}}return0;}

🏠二、珠玑妙算

题目描述:珠玑妙算

在这里插入图片描述

解题思路:
1.创建一个动态分配的数组ret,大小为2,用于存储完全匹配的数量(ret[0])和部分匹配的数量(ret[1])。初始值都设为0

2.使用一个循环遍历字符串solution和guess,若两者在某一位置时字符都相等,说明当前字符完全匹配,增加ret[0]的值。然后将该位置的值分别都修改成一个特殊的字符‘0’,表示这些字符已经被匹过,避免在后续计算部分匹配时重复计算。

3.再次遍历solution和guess,对于solution中的每个字符(未被修改为’0’的字符),检查guess中是否有相同的字符。如果找到匹配的字符,则增加ret[1]的值

4.然后将solution[i]和guess[j]都修改为’0’,表示这些字符已经被匹配过,避免重复计算。

5.跳出循环后,说明部分匹配结束。返回ret数组即可

代码实现:

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';*returnSize =2;}}}return ret;}

🎡三、寻找奇数

题目描述:寻找奇数

在这里插入图片描述

解题思路:根据异或运算符的性质(1.任何数字与自身异或的结果为0。2.任何数字与0异或的结果为自身。3.异或运算满足交换律和结合律)因此,如果将数组中的所有数字依次进行异或运算,成对出现的数字会相互抵消,最终剩下的就是那个唯一不重复的数字。

代码实现:

#include<stdio.h>intmain(){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);return0;}

🚀四、截取字符串

题目描述:截取字符串

在这里插入图片描述

解题思路:
有两种解题方法:一是使用strncpy函数,二是将要截断的下标位置设置为‘\0’,这题过于简单,就不过多赘述了。

代码实现:

//方法一:使用strncpy方法intmain(){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);return0;}
//方法二:将下标n变为结束标志的方法intmain(){char str[1000];scanf("%s",str);int n =0;scanf("%d",&n); str[n]='\0';printf("%s\n",str);return0;}

🎉五、寻找峰值

题目描述:寻找峰值

在这里插入图片描述

解题思路:
1.处理边界情况:检查第一个元素,如果nums[0] > nums[1],则直接返回0,因为nums[0]是峰值;
检查最后一个元素,如果nums[numsLen-1] > nums[numsLen-2],则直接返回numsLen - 1,因为nums[numsLen-1]是峰值。

2.使用一个循环从0到numsLen,对于每个索引i,检查是否满足nums[i] > nums[i-1]且nums[i] > nums[i+1]。

3.如果找到满足条件的元素,则返回其索引i。

4.如果遍历完整个数组都没有找到峰值元素,则返回-1。

代码实现:

intfindPeakElement(int* nums,int numsLen ){// write code here//找两端的峰值if(nums[0]>nums[1]){return0;}if(nums[numsLen-1]>nums[numsLen -2]){return numsLen -1;}for(int i =0;i<numsLen;i++){if(nums[i]> nums[i-1]&&nums[i]> nums[i+1]){return i;}}//没有峰值return-1;}

今天的分享就到这里啦,如果感到不错,希望能给博主一键三连,感谢大家的支持!希望这篇文章可以帮到大家,我们下期再见!

Read more

【工创赛2025-智能物流搬运塔吊方案开源(2分15秒)】西安理工大学工程训练中心

【工创赛2025-智能物流搬运塔吊方案开源(2分15秒)】西安理工大学工程训练中心

一、前言        时光荏苒,岁月如梭。三年的本科竞赛生涯随着工训赛的结束告一段落。竞赛路途中,受到了诸多大佬的帮助和鼓励。为了将这份开源精神传递下去,本团队全体成员一致决定无偿开源本项目机械设计图纸、PCB设计、电控代码、视觉代码及镜像文件、参赛文档以及其他有关设计资料。        请注意,本项目开源文件完全免费,内容遵循CC 4.0 BY-NC-SA版权协议,转载请给出适当的署名,不可用作商业用途,严禁倒卖,若广大网友发现以上行为,请第一时间与我取得联系。        在此,由衷感谢西安理工大学工程训练中心的各位老师对我们竞赛项目的悉心指导与鼎力支持。         这里放一张二代小车同堂的照片作为纪念 二、关于开源项目        运行视频:[开源]2025工训赛智能物流搬运,初赛第八,2分26秒_哔哩哔哩_bilibili        本项目参与了2025年中国大学生工程实践与创新能力大赛全国总决赛,初赛成绩仅1个二环,其余均为一环,总时间2分26秒。决赛由于准备不足以及现场不可预料的因素,成绩不算理想,最后总成绩为全国特等奖。

By Ne0inhk
openclaw update时出现Skipped:this OpenClaw install isn‘t a git checkout,and the package manager解决方案

openclaw update时出现Skipped:this OpenClaw install isn‘t a git checkout,and the package manager解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为ZEEKLOG博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的知识进行总结与归纳,不仅形成深入且独到的理解,而且能够帮助新手快速入门。 本文主要介绍了openclaw update时出现openclaw update时出现Skipped:this OpenClaw install isn’t a git checkout,and the package manager解决方案,希望能对使用openclaw的同学们有所帮助。 文章目录 * 1. 问题描述 * 2. 解决方案 1. 问题描述 今天在使用openclaw update命令进行升级时,却出现了openclaw update时出现Skipped:this OpenClaw install isn’t a git checkout,and

By Ne0inhk
使用开源三件套OpenClaw+Ollama+1Panel部署7×24运行

使用开源三件套OpenClaw+Ollama+1Panel部署7×24运行

一、写在前面 本次操作教程将以开源 Linux 服务器运维面板 1Panel 为基础,搭配 Ollama 本地大模型(无需担心 Token 消耗费用),手把手教你部署 OpenClaw 个人 AI 助理,实现 7×24 小时稳定运行,轻松拥有专属智能助手! 二、资源准备 本次 OpenCalw 本地个人 AI 助理基于一台腾讯 GPU 云服务器构建,云服务器获取过程不做赘述,参见腾讯云官网。其中服务器的配置参见如下: * 操作系统:Ubuntu Server 24.04 LTS 64 位 * 计算资源:20 核 80 G * 磁盘容量:100G

By Ne0inhk
解析ESP-SparkBot开源大模型AI桌面机器人的ESP32-S3核心方案

解析ESP-SparkBot开源大模型AI桌面机器人的ESP32-S3核心方案

ESP-SparkBot是一款基于乐鑫ESP32-S3微控制器构建的开源大模型AI桌面机器人。该项目集成了语音交互、图像识别、远程遥控与多媒体功能于一体,通过创新的边缘-云端协同架构,在低成本硬件上实现了复杂的多模态交互能力,为嵌入式AI应用提供了一个高性价比的参考设计。 一、核心硬件与技术特性 ESP-SparkBot的核心是乐鑫ESP32-S3-WROOM-1-N16R8模组。该模组集成了双核Xtensa® LX7 32位处理器,主频高达240MHz,并配备了512KB片上SRAM。这一计算配置为设备在边缘侧执行实时音频采集、预处理和轻量级AI推理(如语音活动检测、本地关键词识别)提供了必要的算力基础。 在连接性方面,ESP32-S3内置了2.4GHz Wi-Fi 4 (802.11 b/g/n)和蓝牙5.0 (BLE)双模无线通信模块。这使得ESP-SparkBot能够稳定地连接网络,与云端大语言模型(LLM)服务进行数据交换,同时也支持通过手机App进行蓝牙配网和本地控制。丰富的I/O接口,包括I2S、I2C、SPI和ADC等,使其能够灵活扩展多种外设。在项目中,这些接

By Ne0inhk