【C语言】初阶算法相关习题(一)
个人主页
文章目录
- ⭐一、数字在升序数组中出现的次数
- 🏠二、整数转换
- 🚀三、至少是其他数字两倍的最大数
- 🏝️四、字符个数的统计
- 🎄五、自除数
- 🎡六、除自身以外数组的乘积
- 🎉七、两个数组的交集
⭐一、数字在升序数组中出现的次数
题目描述:数字在升序数组中出现的次数
解题思路:由于数组是升序的,所以我们可以直接采用暴力的方法,遍历数组,统计数组中出现这个数字的次数即可解决。
代码实现:
int GetNumberOfK(int* nums, int numsLen, int k ) { // write code here int i = 0; int count = 0; for(i=0;i if(nums[i] == k) { count++; } } return count; } int c = A ^ B; int count = 0; int i = 0; for(i=0;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 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 #include int main() { char a[500]; char str[128] = {0}; int count = 0; scanf("%s",a); int len = strlen(a); for(int i = 0;i if(str[a[i]] == 0) { count++; str[a[i]] = 1; } } printf("%d\n",count); return 0; } 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 if(jungeNumber(i)) { result[count] = i; count++; } } *returnSize = count; return result; } int* result = (int*)malloc(sizeof(int) * numsSize); *returnSize = numsSize; //先乘左边的,再乘右边的 int left = 1,right = 1; for(int i = 0;i result[i] = left; left *= nums[i]; } for(int i = numsSize - 1;i=0;i--) { result[i] *= right; right *= nums[i]; } return result; } int len = nums1Size nums2Size ? nums1Size : nums2Size; int* result = (int*)malloc(sizeof(int) * len); int k = 0; for(int i = 0;i int flag = 0; for(int j = 0;j if(nums1[i] == nums2[j]) { flag = 1; nums2[j] = -1; } } if(flag == 1) { result[k++] = nums1[i]; } } *returnSize = k; return result; }
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。