本文主要是介绍(58)统计能整除数字的位数(59)重新排列数组,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- 1. 每日一言
- 2. 题目 (58)统计能整除数字的位数
- 3. 解题思路
- 4. 代码
- 5. 题目 (59)重新排列数组
- 6.解题思路
- 7. 代码
- 8. 结语
1. 每日一言
小舟从此逝,江海寄余生。 -苏轼-
2. 题目 (58)统计能整除数字的位数
题目链接:统计能整除数字的位数
给你一个整数 num ,返回 num 中能整除 num 的数位的数目。
如果满足 nums % val == 0 ,则认为整数 val 可以整除 nums 。
-
示例 1:
输入:num = 7
输出:1
解释:7 被自己整除,因此答案是 1 。 -
示例 2:
输入:num = 121
输出:2
解释:121 可以被 1 整除,但无法被 2 整除。由于 1 出现两次,所以返回 2 。 -
示例 3:
输入:num = 1248
输出:4
解释:1248 可以被它每一位上的数字整除,因此答案是 4 。
提示:
1 <= num <= 109
num 的数位中不含 0
3. 解题思路
- 声明一个变量tmp,用于存储原始的输入数值num。
- 声明一个变量sum,用于累计能整除num本身的数字个数。
- 使用while循环,条件为tmp的值不等于0。
- 在循环中,通过求余操作(tmp % 10)来获取num的最后一位数字,并将其与num本身进行取模操作(num % (tmp % 10))。
- 如果取模结果等于0,说明该数字可以整除num本身,将sum自增1。
- 将tmp除以10,舍去最后一位数字,以处理下一位数字。
- 循环执行以上步骤,直到将num的所有位数处理完毕。
- 返回sum作为函数的输出结果。
4. 代码
int countDigits(int num) {int tmp = num;//拷贝一份numint sum = 0;while(tmp) {//将tmp的每一位取下来,算一下能否整除numif(num%(tmp%10)==0) {++sum;}tmp/=10;}return sum;
}
5. 题目 (59)重新排列数组
题目链接:重新排列数组
给你一个数组 nums ,数组中有 2n 个元素,按 [x1,x2,…,xn,y1,y2,…,yn] 的格式排列。
请你将数组按 [x1,y1,x2,y2,…,xn,yn] 格式重新排列,返回重排后的数组。
-
示例 1:
输入:nums = [2,5,1,3,4,7], n = 3
输出:[2,3,5,4,1,7]
解释:由于 x1=2, x2=5, x3=1, y1=3, y2=4, y3=7 ,所以答案为 [2,3,5,4,1,7] -
示例 2:
输入:nums = [1,2,3,4,4,3,2,1], n = 4
输出:[1,4,2,3,3,2,4,1] -
示例 3:
输入:nums = [1,1,2,2], n = 2
输出:[1,2,1,2]
提示:
1 <= n <= 500
nums.length == 2n
1 <= nums[i] <= 10^3
6.解题思路
- 使用malloc函数为洗牌结果数组arr分配内存空间,大小为2n。
- 声明两个指针p1和p2,分别指向数组nums的前半部分和后半部分。
- 声明两个计数器j和k,分别用于遍历指针p1和p2所指向的元素。
- 使用for循环遍历数组nums的所有元素。
- 对于奇数索引(i的值为偶数),将指针p1所指向的元素赋值给洗牌结果数组arr的当前位置,并将计数器j自增1。
- 对于偶数索引(i的值为奇数),将指针p2所指向的元素赋值给洗牌结果数组arr的当前位置,并将计数器k自增1。
- 循环执行以上步骤,直到遍历完所有元素。
7. 代码
/*** Note: The returned array must be malloced, assume caller calls free().*/
int* shuffle(int* nums, int numsSize, int n, int* returnSize){int* arr = (int*)malloc(sizeof(int)*2*n);int *p1 = nums;int *p2 = nums+n;int j = 0,k=0;for(int i = 0;i<numsSize;i++) {if(0 == i%2){arr[i] = p1[j];j++;}else{arr[i] = p2[k]; k++;}}*returnSize = numsSize;return arr;
}
8. 结语
请给自己些耐心,一口吃不成胖子。
山外青山楼外楼,莫把百尺当尽头。
保持空杯心态加油努力吧!
都看到这里啦!真棒(*^▽^*)
可以给作者一个免费的赞赞吗,这将会鼓励我继续创作,谢谢大家
编程小白写作,如有纰漏或错误,欢迎指正
这篇关于(58)统计能整除数字的位数(59)重新排列数组的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!