【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

OpenClaw配置飞书机器人完整指南

OpenClaw配置飞书机器人完整指南 使用openclaw channels add配置飞书机器人需完成插件安装→飞书应用创建→通道配置→事件订阅→发布应用五个核心步骤,以下是可直接执行的详细流程。 文章目录 * OpenClaw配置飞书机器人完整指南 * 一、前置准备 * 二、通道配置(openclaw channels add) * 方法1:交互式向导配置(推荐) * 方法2:非交互式命令配置(适合脚本) * 方法3:手动编辑配置文件 * 三、事件订阅与发布(关键步骤) * 四、测试与验证 * 五、常见问题排查 一、前置准备 1. 飞书开放平台创建应用(获取凭证) 1. 访问飞书开放平台:https://open.feishu.cn/app 2. 创建企业自建应用,填写名称(如"

By Ne0inhk

3分钟变身AI绘画大师:SDXL Prompt Styler如何让你的提示词拥有魔法?

3分钟变身AI绘画大师:SDXL Prompt Styler如何让你的提示词拥有魔法? 【免费下载链接】sdxl_prompt_styler 项目地址: https://gitcode.com/gh_mirrors/sd/sdxl_prompt_styler 在AI绘画的世界里,你是否也曾遇到这样的困境:明明脑海中已经有了清晰的画面,却无法用文字精准传达给AI?🤔 别担心!今天要介绍的SDXL Prompt Styler就像一位神奇的翻译官,能把你的创意灵感转化为AI能理解的艺术语言,让你的作品瞬间提升几个level! 为什么你的AI绘画总差一口气? 想象一下,你想画一个"森林中的未来帐篷",直接输入提示词可能得到一张普通图片。但如果给提示词加上"奥斯卡级视觉效果、专业摄影、超细节刻画"这样的魔法前缀,结果会怎样?✨ SDXL Prompt Styler就是这样一个给提示词"化妆"的神器,

By Ne0inhk
FPGA加速图像处理:核心算法全解析

FPGA加速图像处理:核心算法全解析

FPGA(现场可编程门阵列)在图像处理领域因其并行处理能力、低延迟、高能效和可定制化 的特点而极具优势,特别适合于实时性要求高、算法固定、功耗受限 的应用场景。 以下是FPGA上常实现的主流图像处理算法,按处理流程和类别划分: 一、底层图像预处理(像素级操作) 这类算法高度并行,非常适合FPGA。 1. 色彩空间转换 * RGB转灰度:Y = 0.299R + 0.587G + 0.114B,可通过移位和加法实现,无需乘法器。 * RGB与YCbCr互转:视频压缩(如JPEG, H.264)中的关键步骤,FPGA可以并行计算三个分量。 2. 几何变换 * 旋转、缩放、平移:需要插值算法(如双线性插值、最邻近插值)。FPGA可以并行计算多个输出像素的坐标和插值。 3. 图像校正 * 镜头畸变校正:通过查找表(LUT)

By Ne0inhk
【花雕动手做】拆解机器人底盘DDSM400钕强磁外转子65mm伺服轮毂电机

【花雕动手做】拆解机器人底盘DDSM400钕强磁外转子65mm伺服轮毂电机

做小型高精度全向机器人底盘,想找一款 “省心又能打” 的动力核心?DDSM400 钕强磁外转子 65mm 伺服轮毂电机 绝对是优选——它把无刷电机、FOC 伺服驱动、高精度编码器集成一体,钕强磁加持、外转子直驱设计,不用额外搭配驱动板,直接装轮就能用,是麦克纳姆轮底盘的 “一体化动力神器”。 但很多创客只知道它好用,却不清楚内部构造:钕强磁转子藏着怎样的动力秘密?伺服驱动和编码器是如何实现精准控制的?外转子直驱为什么能做到零背隙、低噪音? 这里,就完整拆解这款 DDSM400 伺服轮毂电机,从外到内拆解核心部件,解析它的结构优势与工作逻辑,帮你真正看懂这款 “一体化伺服电机”,以后选型、改装、调试机器人底盘,都能心里有底、少走弯路。 DDSM400 伺服轮毂电机・简单拆解步骤 1、拧下轮毂固定螺丝用内六角扳手卸下电机外圈的固定螺丝,分离轮毂外壳与端盖。 2、取出外转子与强磁体轻轻取下外转子总成,内部可见一圈钕铁硼强磁,注意磁力较大,轻拿轻放。 3、

By Ne0inhk