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

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

本专栏为c语言练习专栏,适合刚刚学完c语言的初学者。本专栏每天会不定时更新,通过每天练习,进一步对c语言的重难点知识进行更深入的学习。

今日练习题关键字:自除数 除自身以外数组的乘积

在这里插入图片描述

💓博主csdn个人主页:小小unicorn
⏩专栏分类:C语言天天练
🚚代码仓库:小小unicorn的代码仓库🚚
🌹🌹🌹关注我带你学习编程知识

Day1

  • 题目一:
    • 题目描述:
    • 解题思路:
    • 代码实现:
    • 结果情况:
  • 题目二:
    • 题目描述:
    • 解题思路:
    • 代码实现:
    • 结果情况:
  • 总结:

题目一:

题目描述:

题目来源:自除数
自除数 是指可以被它包含的每一位数整除的数。

例如,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;
}

结果情况:

在这里插入图片描述
符合题目要求,问题得到解决。

总结:

文章到这里就要告一段落了,有更好的想法或问题,欢迎评论区留言。
希望今天的练习能对您有所收获,咱们下期见!

http://www.lryc.cn/news/146448.html

相关文章:

  • 发力服务业务,龙湖集团半程领跑赢在“智慧”
  • Kubernetes(七)修改 pod 网络(flannel 插件)
  • 测试平台metersphere
  • 论文笔记: One Fits All:Power General Time Series Analysis by Pretrained LM
  • 记录--怎么实现一个3d翻书效果
  • (数字图像处理MATLAB+Python)第十一章图像描述与分析-第一节、二节:图像描述概述和特征点
  • SSM框架的学习与应用(Spring + Spring MVC + MyBatis)-Java EE企业级应用开发学习记录(第五天)MyBatis的注解开发
  • VBA技术资料MF48:VBA_在Excel中将列号与字母转换
  • LeetCode-160. 相交链表
  • 微信小程序如何实现页面传参和页面传递多个参数
  • ChatGPT⼊门到精通(3):ChatGPT 原理
  • nginx配置keepalive长连接
  • Thread.enumerate方法
  • * 号靠近数据类型,和靠近变量名, 号靠近数据类型,和靠近变量名,有什么区别
  • 为了做好农业,拼多多请来顶尖农业专家当独立董事
  • Linux服务器安装部署MongoDB数据库 – 【无公网IP远程连接】
  • Python+PIL+qrcode实现二维码自由—普通二维码+彩色二维码+logo二维码+动态二维码(附完整代码)
  • 【Spring Data JPA】JPA 常用查询函数
  • Visual Studio 2022的MFC框架——AfxWinMain全局对象和InitInstance函数
  • 【网络】多路转接——poll | epoll
  • 音视频 ffmpeg命令视频录制(Windows)
  • 【拾枝杂谈】从游戏开发的角度来谈谈原神4.0更新
  • QT设置mainwindow的窗口title
  • SaaS多租户系统架构设计
  • Java自定义捕获异常
  • 力扣--数组类题目27. 移除元素
  • 实际并行workers数量不等于postgresql.conf中设置的max_parallel_workers_per_gather数量
  • java定位问题工具
  • 【Java】基础入门 (十六)--- 异常
  • [javaWeb]Socket网络编程