当前位置: 首页 > news >正文

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

在这里插入图片描述
个人主页
在这里插入图片描述

文章目录

  • ⭐一、数字在升序数组中出现的次数
  • 🏠二、整数转换
  • 🚀三、至少是其他数字两倍的最大数
  • 🏝️四、字符个数的统计
  • 🎄五、自除数
  • 🎡六、除自身以外数组的乘积
  • 🎉七、两个数组的交集

⭐一、数字在升序数组中出现的次数

题目描述:数字在升序数组中出现的次数
在这里插入图片描述

解题思路:由于数组是升序的,所以我们可以直接采用暴力的方法,遍历数组,统计数组中出现这个数字的次数即可解决。

代码实现:

int GetNumberOfK(int* nums, int numsLen, int k ) {// write code hereint i = 0;int count = 0;for(i=0;i<numsLen;i++){if(nums[i] == k){count++;}}return count;
}

🏠二、整数转换

题目描述:整数转换
在这里插入图片描述
解题思路:
1.使用异或即相同为0相异为1,将AB进行异或得到AB在哪些位置不同
2.然后将将异或后的结果二进制每一位都按位与1,每完成一次就右移一位,用count来统计最低位是否为1的次数,最终count的结果就是不同位置的个数

代码实现:

int convertInteger(int A, int B) {int c = A ^ B;int count = 0;int i = 0;for(i=0;i<32;i++){if((c & 1) == 1){count++;}c >>= 1;}return count;
}

🚀三、至少是其他数字两倍的最大数

题目描述:至少是其他数字两倍的最大数

在这里插入图片描述

解题思路:
1.创建一个max变量表示最大值,secondmax表示次大值,m用于记录最大值的下标。
2.遍历数组,如果当前值大于 max,更新 secondmax 为原来的 max,并将 max 更新为当前值,同时记录最大值的索引m。否则,如果当前值大于 secondmax,更新 secondmax。
3.遍历结束后,判断 max 是否大于等于 2 × secondmax,并根据条件返回结果。

代码实现:

int dominantIndex(int* nums, int numsSize) {int max = 0;int secondmax = 0;//记录最大值的下标int m = 0;for(int i = 0;i<numsSize;i++){if(nums[i] > max){secondmax = max;max = nums[i];m = i;}else if(nums[i] > secondmax){secondmax = nums[i];}}return (max >= (2 * secondmax)) ? m:-1;
}

🏝️四、字符个数的统计

题目描述:字符个数的统计

在这里插入图片描述
解题思路:
1.定义一个字符数组 a 用于存储输入的字符串。
2.定义一个辅助数组 str,大小为 128,用于记录每个字符是否出现过。
3.使用 strlen函数 获取输入字符串的长度。
4.遍历输入字符串的每个字符,利用 str 数组记录字符的出现情况,并统计不同字符的数量,统计完后将改位置的值设为1,避免重复计算。
5.最后输出统计结果即可。
代码实现:

#include <stdio.h>
#include <string.h>int main() {char a[500];char str[128] = {0};int count = 0;scanf("%s",a);int len = strlen(a);for(int i = 0;i<len;i++){if(str[a[i]] == 0){count++;str[a[i]] = 1;}}printf("%d\n",count);return 0;
}

🎄五、自除数

题目描述:自除数

在这里插入图片描述

解题思路:
1.由题可知返回值是以数组的形式,因此创建一个数组result,大小为(right-left+1)
2.使用循环语句,对left和right之间的元素一一进行判断(使用jungeNumber函数)
3.jungeNumber函数:对于一个数进行判断,使用while语句进行,用flag求得被除数,每进行一次取余的判断,tmp就除10,出循环后说明该数是自除数。

代码实现:

bool jungeNumber(int nums)
{int tmp,flag;tmp = nums;while(tmp > 0){flag = tmp % 10;if(flag == 0 || nums % flag != 0){return false;}tmp /= 10;}return true;
}int* selfDividingNumbers(int left, int right, int* returnSize) {int* result = (int*)malloc(sizeof(int) * (right - left + 1));int count = 0;for(int i = left;i <= right;i++){if(jungeNumber(i)){result[count] = i;count++;}}*returnSize = count;return result;
}

🎡六、除自身以外数组的乘积

题目描述:除自身以外数组的乘积

在这里插入图片描述

解题思路:
1.创建一个大小为numSize的数组,用于存储最终结果。
2.初始化 left 和 right 为 1,分别用于记录左边和右边的乘积。
3.先从左到右遍历数组,计算每个位置的左边乘积并存储到 result 中。
4.再从右到左遍历数组,计算每个位置的右边乘积并与 result 中的值相乘,得到最终结果。
5.最后返回 result 数组。

代码实现:

int* productExceptSelf(int* nums, int numsSize, int* returnSize) {int* result = (int*)malloc(sizeof(int) * numsSize);*returnSize = numsSize;//先乘左边的,再乘右边的int left = 1,right = 1;for(int i = 0;i<numsSize;i++){result[i] = left;left *= nums[i];}for(int i = numsSize - 1;i>=0;i--){result[i] *= right;right *= nums[i];}return result;
}

🎉七、两个数组的交集

题目描述:两个数组的交集
在这里插入图片描述

解题思路:
1.首先判断两个数组的长度谁大,根据较大值开辟一个数组result,用于存储相交时的结果,再定义一个变量k,用于记录结果数组中元素的个数。
2.然后遍历两个数组,定义一个变量flag初始化为0,当找到相等元素时,将nums2[j]的值置为-1,目的是避免重复匹配,同时将flag置为1,表示找到相同元素。
3.将nums[i]的元素添加到result数组中,并不断对k+1。最后返回result数组即可。

代码实现:

int* intersection(int* nums1, int nums1Size, int* nums2, int nums2Size, int* returnSize) {int len = nums1Size > nums2Size ? nums1Size : nums2Size;int* result = (int*)malloc(sizeof(int) * len);int k = 0;for(int i = 0;i<nums1Size;i++){int flag = 0;for(int j = 0;j<nums2Size;j++){if(nums1[i] == nums2[j]){flag = 1;nums2[j] = -1;}}if(flag == 1){result[k++] = nums1[i];}}*returnSize = k;return result;
}

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

http://www.xdnf.cn/news/75547.html

相关文章:

  • Docker 部署 PostgreSQL 数据库
  • 记录学习的第三十天
  • 20.4 显示数据库数据
  • Centos 、Linux 基础运维命令
  • 【程序员 NLP 入门】词嵌入 - 如何基于计数的方法表示文本? (★小白必会版★)
  • MacOS 10.15上能跑大语言模型吗?
  • 用Java实现简易区块链:从零开始的探索
  • Mongodb分布式文件存储数据库
  • 相对论大师-记录型正负性质BFS/图论-链表/数据结构
  • sqoop的参数及初体验
  • 【MCP Node.js SDK 全栈进阶指南】初级篇(1):MCP开发环境搭建详解
  • chromedp 反反爬设计方案
  • 美乐迪电玩大厅加载机制与 RoomList 配置结构分析
  • JavaScript之深浅拷贝
  • 安宝特方案 | 医疗AR眼镜,重新定义远程会诊体验
  • 【安装部署】Linux下最简单的 pytorch3d 安装
  • 安宝特案例 | AR如何大幅提升IC封装厂检测效率?
  • C#进阶学习(十)更加安全的委托——事件以及匿名函数与Lambda表达式和闭包的介绍
  • 【架构】ANSI/IEEE 1471-2000标准深度解析:软件密集型系统架构描述推荐实践
  • 【MATLAB第117期】#源码分享 | 基于MATLAB的SSM状态空间模型多元时间序列预测方法(多输入单输出)
  • 4.21—4.22学习总结 JavaWeb:HTML-CSS
  • Laravel 对接阿里云 OSS 说明文档
  • ecovadis评级范围,如何拿到ecovadis评级高分
  • K8S探针的应用
  • 【教程】安装 iterm2 打造漂亮且高性能的 mac 终端
  • k8s-1.28.10 安装metrics-server
  • 模拟实现strncat、qsort、atoi
  • AR/VR衍射光波导性能提升遇阻?OAS光学软件有方法
  • 如何将当前文件夹及其子文件夹下的所有word提取到一个excel里
  • 新能源汽车充电桩:多元化运营模式助力低碳出行