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

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

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

今日练习题关键字:整数转换 异或

在这里插入图片描述

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

Day1

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

题目一:

题目描述:

整数转换。编写一个函数,确定需要改变几个位才能将整数A转成整数B。

在这里插入图片描述

解题思路:

题目来源:整数转换
首先我们要明白异或运算符的原理,^ 这个就是异或运算符,两整数二进制位进行逐位比较,相同为0,相异为1,比如我们的数字1,二进制表示为 0001,数字2,二进制表示为 0010,对1和2进行异或,结果为 0011。这就是相同为0,相异为1的规则。

现在我们来看题目,题目要求的是两数转换需要变动多少位(二进制位),换句话说,题目问的是两数二进制之间有多少处不同

我们先把两数异或,把值存在变量 c 中,然后再用到我们的按位与运算符,即 &,和按位异或不同,按位与是两整数二进制位逐位进行比较,遇0为0,否则为1,这里我们利用数字1,因为它的二进制中只有1个1,且在最右边,我们可以把它们进行比较。

因为1只有最右边为1,所以如果想32位都能比到的话,就需要我们的右移操作符了,每比较一次,我们的变量 c 就向右移动一位(左端补符号位),此时只需要在外面套上for循环,循环次数为32次,这样我们就能把 c 中的每一位与数字1进行 按位与 比较了。

只要我们在 c 的二进制位中找到一个1,计数器count就++,最后程序返回count的值就行了。

代码实现:

int convertInteger(int A, int B)
{//位运算,先异或(相同为0,相异为1)//再利用0的二进制进行与运算(遇1为1)int c = A ^ B;//两数异或后的值int i = 0;//循环控制器int count = 0;//计数器for(i = 0 ;i < 32 ;i++){if(c & 1 == 1)//利用与1的 按位与 运算,发现一个1,计数器就++{count++;}c >>= 1;// c 变量的二进制位往右移动一位 }return count;//返回计数器的值
}

结果情况:

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

题目二:

题目描述:

题目来源:数字在升序数组中出现的次数
给定一个长度为 n 的非降序数组和一个非负数整数 k ,要求统计 k 在数组中出现的次数
数据范围:0≤n≤1000,0≤k≤100,数组中每个元素的值满足
要求:空间复杂度 O(1),时间复杂度 O(logn)

在这里插入图片描述

解题思路:

因为是有序的,所以用二分查找更快。找到比k小的第一个数作为左边界,找到比k大的第一个数作为右边界,右-左即k的个数。

按普通找某个数的位置来找,只是把int 改为double, 找k-0.5和k+0.5

代码实现:

int position(int* data, int n, double k) 
{int left = 0, right = n - 1, mid = 0;while (left <= right) {mid = (left + right) / 2;if (data[mid] < k)left = mid + 1;else if (data[mid] > k)right = mid - 1;elsereturn mid;}return left;
}
int GetNumberOfK(int* data, int dataLen, int k ) 
{return position(data, dataLen, k + 0.5) - position(data, dataLen, k - 0.5);
}
}

结果情况:

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

总结:

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

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

相关文章:

  • springboot中使用ElasticSearch
  • 十二、集合(2)
  • 【网络设备】交换机的概念、工作原理、功能以及以太网帧格式
  • 研磨设计模式day11观察者模式
  • 第八周第二天学习总结 | MySQL入门及练习学习第四天
  • WPF数据转换
  • 《Go 语言第一课》课程学习笔记(十三)
  • 基于RUM高效治理网站用户体验入门-价值篇
  • Unity之Photon PUN2开发多人游戏如何实现组队功能
  • 大数据Flink简介与架构剖析并搭建基础运行环境
  • RISC-V IOPMP实际用例-Rapid-k模型在NVIDIA上的应用
  • 【UE5】给模型指定面添加自定义材质
  • mall:redis项目源码解析
  • RISC-V Linux系统kernel制作
  • 5G NR:PRACH时域资源
  • LLaMA-2的模型架构
  • 掌握Java框架之Struts,开启高效开发之旅!
  • 关于Vue.set()
  • Selenium 遇见伪元素该如何处理?
  • RPA技术介绍与应用价值
  • 产品经理,需要具备哪些能力和知识
  • 【C++】map和set
  • crawlab通过docker单节点部署简单爬虫
  • 【STM32】中断与NVIC以外部中断为例
  • 大学生网页设计制作作业实例代码 (全网最全,建议收藏) HTML+CSS+JS
  • Llama模型结构解析(源码阅读)
  • 基于XML实现SpringIoC配置
  • Kaniko在containerd中无特权快速构建并推送容器镜像
  • 分享5款不会被打入冷宫的神器软件
  • Windows如何部署Redis