(58)统计能整除数字的位数(59)重新排列数组

2024-03-17 20:04

本文主要是介绍(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. 解题思路

  1. 声明一个变量tmp,用于存储原始的输入数值num。
  2. 声明一个变量sum,用于累计能整除num本身的数字个数。
  3. 使用while循环,条件为tmp的值不等于0。
  4. 在循环中,通过求余操作(tmp % 10)来获取num的最后一位数字,并将其与num本身进行取模操作(num % (tmp % 10))。
  5. 如果取模结果等于0,说明该数字可以整除num本身,将sum自增1。
  6. 将tmp除以10,舍去最后一位数字,以处理下一位数字。
  7. 循环执行以上步骤,直到将num的所有位数处理完毕。
  8. 返回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.解题思路

  1. 使用malloc函数为洗牌结果数组arr分配内存空间,大小为2n。
  2. 声明两个指针p1和p2,分别指向数组nums的前半部分和后半部分。
  3. 声明两个计数器j和k,分别用于遍历指针p1和p2所指向的元素。
  4. 使用for循环遍历数组nums的所有元素。
  5. 对于奇数索引(i的值为偶数),将指针p1所指向的元素赋值给洗牌结果数组arr的当前位置,并将计数器j自增1。
  6. 对于偶数索引(i的值为奇数),将指针p2所指向的元素赋值给洗牌结果数组arr的当前位置,并将计数器k自增1。
  7. 循环执行以上步骤,直到遍历完所有元素。

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)重新排列数组的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/820004

相关文章

从去中心化到智能化:Web3如何与AI共同塑造数字生态

在数字时代的演进中,Web3和人工智能(AI)正成为塑造未来互联网的两大核心力量。Web3的去中心化理念与AI的智能化技术,正相互交织,共同推动数字生态的变革。本文将探讨Web3与AI的融合如何改变数字世界,并展望这一新兴组合如何重塑我们的在线体验。 Web3的去中心化愿景 Web3代表了互联网的第三代发展,它基于去中心化的区块链技术,旨在创建一个开放、透明且用户主导的数字生态。不同于传统

hdu1496(用hash思想统计数目)

作为一个刚学hash的孩子,感觉这道题目很不错,灵活的运用的数组的下标。 解题步骤:如果用常规方法解,那么时间复杂度为O(n^4),肯定会超时,然后参考了网上的解题方法,将等式分成两个部分,a*x1^2+b*x2^2和c*x3^2+d*x4^2, 各自作为数组的下标,如果两部分相加为0,则满足等式; 代码如下: #include<iostream>#include<algorithm

hdu2241(二分+合并数组)

题意:判断是否存在a+b+c = x,a,b,c分别属于集合A,B,C 如果用暴力会超时,所以这里用到了数组合并,将b,c数组合并成d,d数组存的是b,c数组元素的和,然后对d数组进行二分就可以了 代码如下(附注释): #include<iostream>#include<algorithm>#include<cstring>#include<stack>#include<que

usaco 1.2 Name That Number(数字字母转化)

巧妙的利用code[b[0]-'A'] 将字符ABC...Z转换为数字 需要注意的是重新开一个数组 c [ ] 存储字符串 应人为的在末尾附上 ‘ \ 0 ’ 详见代码: /*ID: who jayLANG: C++TASK: namenum*/#include<stdio.h>#include<string.h>int main(){FILE *fin = fopen (

hdu 1166 敌兵布阵(树状数组 or 线段树)

题意是求一个线段的和,在线段上可以进行加减的修改。 树状数组的模板题。 代码: #include <stdio.h>#include <string.h>const int maxn = 50000 + 1;int c[maxn];int n;int lowbit(int x){return x & -x;}void add(int x, int num){while

flume系列之:查看flume系统日志、查看统计flume日志类型、查看flume日志

遍历指定目录下多个文件查找指定内容 服务器系统日志会记录flume相关日志 cat /var/log/messages |grep -i oom 查找系统日志中关于flume的指定日志 import osdef search_string_in_files(directory, search_string):count = 0

hdu4267区间统计

题意:给一些数,有两种操作,一种是在[a,b] 区间内,对(i - a)% k == 0 的加value,另一种操作是询问某个位置的值。 import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import

hdu4417区间统计

给你一个数列{An},然后有m次查询,每次查询一段区间 [l,r] <= h 的值的个数。 import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamRead

hdu3333区间统计

题目大意:求一个区间内不重复数字的和,例如1 1 1 3,区间[1,4]的和为4。 import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;

实例:如何统计当前主机的连接状态和连接数

统计当前主机的连接状态和连接数 在 Linux 中,可使用 ss 命令来查看主机的网络连接状态。以下是统计当前主机连接状态和连接主机数量的具体操作。 1. 统计当前主机的连接状态 使用 ss 命令结合 grep、cut、sort 和 uniq 命令来统计当前主机的 TCP 连接状态。 ss -nta | grep -v '^State' | cut -d " " -f 1 | sort |