C语言每日一练------Day(10)

简介: C语言每日一练------Day(10)

题目一:

题目描述:

题目来源:自除数

自除数 是指可以被它包含的每一位数整除的数。

例如,128 是一个 自除数 ,因为 128 % 1 == 0, 128 % 2 == 0,128 % 8 == 0。

自除数 不允许包含 0 。

给定两个整数 left 和 right ,返回一个列表,列表的元素是范围 [left, right] 内所有的 自除数 。

解题思路:

遍历范围 [left,right] 内的所有整数,分别判断每个整数是否为自除数。

根据自除数的定义,如果一个整数不包含 0 且能被它包含的每一位数整除,则该整数是自除数。判断一个整数是否为自除数的方法是遍历整数的每一位,判断每一位数是否为 0 以及是否可以整除该整数。

遍历整数的每一位的方法是,每次将当前整数对 10取模即可得到当前整数的最后一位,然后将整数除以 10。重复该操作,直到当前整数变成 0 时即遍历了整数的每一位。

代码实现:

bool isSelfDividing(int num) 
{
    int temp = num;
    while (temp > 0) 
    {
        int digit = temp % 10;
        if (digit == 0 || num % digit != 0) 
        {
            return false;
        }
        temp /= 10;
    }
    return true;
}
int* selfDividingNumbers(int left, int right, int* returnSize)
{
    int * ans = (int *)malloc(sizeof(int) * (right - left + 1));
    int pos = 0;
    for (int i = left; i <= right; i++) 
    {
        if (isSelfDividing(i)) 
        {
            ans[pos++] = i;
        }
    }
    *returnSize = pos;
    return ans;
}

结果情况:

符合题目要求,问题得到解决。

题目二:

题目描述:

题目来源:除自身以外数组的乘积

给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。

题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。

请不要使用除法,且在 O(n) 时间复杂度内完成此题。

解题思路:

分成前缀和后缀然后相乘。

代码实现:

/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* productExceptSelf(int* nums, int numsSize, int* returnSize)
{
    int L[numsSize]; // 前缀的乘积
    int R[numsSize]; // 后缀的乘积
    // 前缀
    L[0] = 1;
    for(int i = 1; i < numsSize; i++)
    {
        L[i] = L[i - 1] * nums[i - 1];
    }
    // 后缀
    R[numsSize - 1] = 1;
    for(int i = numsSize - 2; i >= 0; i--)
    {
        R[i] = R[i + 1] * nums[i + 1];
    }
    int* answer = (int*)malloc(sizeof(int) * numsSize);
    for(*returnSize = 0; *returnSize < numsSize; (*returnSize)++)
    {
        answer[*returnSize] = L[*returnSize] * R[*returnSize];
    }
    return answer;
}

结果情况:

符合题目要求,问题得到解决。

总结:

文章到这里就要告一段落了,有更好的想法或问题,欢迎评论区留言。

希望今天的练习能对您有所收获,咱们下期见!

相关文章
|
6月前
|
存储 人工智能 安全
C语言:选择+编程(每日一练Day15)
C语言:选择+编程(每日一练Day15)
82 2
|
6月前
|
C语言
C语言:选择+编程(每日一练Day13)
C语言:选择+编程(每日一练Day13)
59 0
|
6月前
|
测试技术 C语言
C语言每日一练Day03——移除元素
C语言每日一练Day03——移除元素
|
6月前
|
C语言
C语言每日一练——Day02:求最小公倍数(3种方法)
C语言每日一练——Day02:求最小公倍数(3种方法)
|
6月前
|
C语言
C语言每日一练——Day01:求最大公约数(三种方法)
C语言每日一练——Day01:求最大公约数(三种方法)
|
6月前
|
存储 人工智能 C语言
C语言:选择+编程(每日一练Day16)
C语言:选择+编程(每日一练Day16)
55 3
|
6月前
|
C语言
C语言:选择+编程(每日一练Day14)
C语言:选择+编程(每日一练Day14)
59 2
|
6月前
|
编译器 C语言
C语言:选择+编程(每日一练Day12)
C语言:选择+编程(每日一练Day12)
54 2
|
6月前
|
C语言
C语言:选择+编程(每日一练Day11)
C语言:选择+编程(每日一练Day11)
47 2
|
6月前
|
C语言
C语言:选择+编程(每日一练Day10)
C语言:选择+编程(每日一练Day10)
56 1