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

news2024/11/20 6:15:18

本专栏为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;
        else
            return 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.coloradmin.cn/o/945752.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Ubuntu下的QT开发

ubuntu安装QT的组件如下&#xff1a; 若要在ubuntu下启动QT有两种方案&#xff0c;一种是在菜单栏搜索qt双QT Create&#xff1b;另一种则是使用命令&#xff1a;/opt/Qt5.12.9/Tools/QtCreator/bin/qtcreator.sh

小白视角:一文读懂3TS腾讯事务处理验证系统的基础知识

小白视角&#xff1a;一文读懂3TS腾讯事务处理验证系统的基础知识 一、解读结果图1.1 异常测试用例1.2 事务的隔离级别&#xff08;1&#xff09;SQL标准隔离级别&#xff08;2&#xff09;快照隔离&#xff08;Snapshot Isolation&#xff0c;简称 SI&#xff09;&#xff08;…

Linux环境离线安装MySQL8.0.33

目录 一、准备 1、检查libaio.so.1 2、卸载删除原有的mariadb 3、删除my.cnf 4、下载mysql安装包 二、安装 1、上传mysql 2、建立mysql所需目录 3、建立配置文件my.cnf 4、创建mysql用户并授权 5、初始化数据库 6、启动MySQL数据库 7、常见启动报错处理 8、配置M…

VS的调试技巧

Visual Studiohttps://visualstudio.microsoft.com/zh-hans/vs/ 目录 1、什么是调试&#xff1f; 2、debug和release 3、调试 3.1、环境 3.2、 快捷键 3.2.1、F10和F11 3.2.2、ctrlF5 3.2.3、F5与F9 3.2.3.1、条件断点 3.3、监视和内存观察 3.3.1、监视 3.3.2、内存 …

【爬虫GUI】YouTube评论采集软件,突破反爬,可无限爬取!

文章目录 一、背景介绍1.1 软件说明1.2 效果演示 二、科普知识2.1 关于视频id2.2 关于评论时间 三、爬虫代码3.1 界面模块3.2 爬虫模块3.3 日志模块 四、获取源码及软件 一、背景介绍 你好&#xff0c;我是马哥python说 &#xff0c;一名10年程序猿。 最近我用python开发了一…

基于蜜獾算法优化的BP神经网络(预测应用) - 附代码

基于蜜獾算法优化的BP神经网络&#xff08;预测应用&#xff09; - 附代码 文章目录 基于蜜獾算法优化的BP神经网络&#xff08;预测应用&#xff09; - 附代码1.数据介绍2.蜜獾优化BP神经网络2.1 BP神经网络参数设置2.2 蜜獾算法应用 4.测试结果&#xff1a;5.Matlab代码 摘要…

融合正余弦和柯西变异的麻雀搜索算法(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

【数据结构】排序(插入、选择、交换、归并) -- 详解

一、排序的概念及其运用 1、排序的概念 排序&#xff1a;所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作。 稳定性&#xff1a;假定在待排序的记录序列中&#xff0c;存在多个具有相同的关键字的记…

APP弱网测试

测试用例 在弱网的条件下 页面的响应正常页面展示的数据无误页面的一致性无误&#xff08;图片展示、排版预期一致、数据展示无误&#xff09;是否会出现ANR、Crash 在网络切换的情况下 页面交互无误无奔溃、显示错乱客户端服务端数据一致性展示无误请求堆积的出路无误 在无网…

谈谈智能安防领域

目录 1.什么是智能安防 2.智能安防的发展过程 3.智能安防涉及到的知识 4.智能安防给人类带来的福利 1.什么是智能安防 智能安防是基于人工智能技术的安全防护系统&#xff0c;旨在通过智能化的方法保护人员和财产的安全。它利用传感器、摄像头、算法等技术&#xff0c;通过识…

前端面试必备 | uni-app 篇(P1-15)

文章目录 1. 请简述一下uni-app的定义和特点。2. uni-app兼容哪些前端框架&#xff1f;请列举几个。3. 请简述一下uni-app的跨平台工作原理。4. 什么是条件编译&#xff1f;在uni-app中如何实现条件编译&#xff1f;5. uni-app中的页面生命周期有哪些&#xff1f;请简要介绍。6…

【卷积神经网络】MNIST 手写体识别

LeNet-5 是经典卷积神经网络之一&#xff0c;1998 年由 Yann LeCun 等人在论文 《Gradient-Based Learning Applied to Document Recognition》中提出。LeNet-5 网络使用了卷积层、池化层和全连接层&#xff0c;实现可以应用于手写体识别的卷积神经网络。TensorFlow 内置了 MNI…

网络基础知识socket编程

目录 网络通信概述网络互连模型&#xff1a;OSI 七层模型TCP/IP 四层/五层模型数据的封装与拆封 IP 地址IP 地址的编址方式IP 地址的分类特殊的IP 地址如何判断2 个IP 地址是否在同一个网段内 TCP/IP 协议TCP 协议TCP 协议的特性TCP 报文格式建立TCP 连接&#xff1a;三次握手关…

vue2 支持图片放大

添加 :preview-src-list属性 <el-imagev-for"item in specialData.urls":src"item":key"item.index":preview-src-list[item]class"pictrue"/>

李跳跳apk

李跳跳下载&#xff0c;密码 65c9

【VRRP】虚拟路由冗余协议

什么是VRRP&#xff1f; 虚拟路由冗余协议VRRP&#xff08;Virtual Router Redundancy Protocol&#xff09;是一种用于提高网络可靠性的容错协议。通过VRRP&#xff0c;可以在主机的下一跳设备出现故障时&#xff0c;及时将业务切换到备份设备&#xff0c;从而保障网络通信的…

【桌面小屏幕项目】ESP32开发环境搭建

视频教程链接&#xff1a; 【【有手就行系列】嵌入式单片机教程-桌面小屏幕实战教学 从设计、硬件、焊接到代码编写、调试 ESP32 持续更新2022】 https://www.bilibili.com/video/BV1wV4y1G7Vk/?share_sourcecopy_web&vd_source4fa5fad39452b08a8f4aa46532e890a7 一、esp…

C++标准库STL容器详解

目录 C标准模板库STL容器容器分类容器通用接口 顺序容器vectorlistdeque 容器适配器queuestackpriority_queue 关联容器&#xff1a;红黑树setmultisetmapmultimap 关联容器&#xff1a;哈希表unordered_set和unordered_multisetunordered_map和unordered_multimap 附1&#xf…

机械硬盘HDD的基础知识介绍

机械硬盘在价格&#xff0c;容量&#xff0c;磨损度上面都只有着SSD不可取代的地方&#xff0c;目前世界上80%的数据仍然存储在HDD上&#xff0c;不过随着科技的进步&#xff0c;以及SSD技术不断的突破和逐渐降低的价格&#xff0c;HDD的占比会越来越低,至于未来会不会被SSD完全…

任务执行和调度----Spring线程池/Quartz

定时任务 在服务器中可能会有定时任务&#xff0c;但是不知道分布式系统下次会访问哪一个服务器&#xff0c;所以服务器中的任务就是相同的&#xff0c;这样会导致浪费。使用Quartz可以解决这个问题。 JDK线程池 RunWith(SpringRunner.class) SpringBootTest ContextConfi…