C语言之练习题

在这里插入图片描述

欢迎来到我的:世界

希望作者的文章对你有所帮助,有不足的地方还请指正,大家一起学习交流 !


目录

  • 前言
  • 简答题
    • 第一题
    • 第二题
  • 编程题
    • 第一题
    • 第二题
    • 第三题
    • 第四题
  • 总结

前言

这期文章由:两题问答题+四道编程题;小孩在文章中写有详细解题思路,感谢大家支持支持。


简答题

第一题

在这里插入图片描述

思路:

首先我们要知道x=x&(x-1)的含义;
假设x=3;也就是 011
而x-1=2;是010
x&(x-1),按照&的运算原则;有0则为0,两者都为1,则为1;那么运算结果为010

  • 这时在来看看x-1,如果原x的最后一位为1,那么就是将最后一位改为0
  • 那如果x不是最后一位为0,那么其减1取决于其上一位,如果其上一位还是为0,就再往前找,直到找到1,然后将这位改为0,然后将其后都改为1
    总结:这个二进制的最后一个1变成了0,之后的数都变成了1;
    在这里插入图片描述
  • 综上所述x=x&(x-1)就是:将 xx 的二进制表示的最后一个 1 变成 0 。

现在我们看看该函数:先x=-1,补码:0xFFFFFFFF;
x-1=-2,补码:0xFFFFFFFD
新的x=x&(x-1); 0xFFFFFFFF & 0xFFFFFFFD=0xFFFFFFFD;
这时也就是将1111 1111 1111 1111 1111 1111 1111 1110,就将最后一位1改为0
这个循环里,直到最后将-1的补码全部转为0,就会跳出循环了;
这里应该有32次循环


第二题

下列函数输出的结果是( )?

在这里插入图片描述

思路:

这道题考察的是我们对二进制移位的了解程度;

在这里插入图片描述

编程题

第一题


地址:oj地址


在这里插入图片描述

解题思路:排序
因为我们需要返回下标,所以我们不能再原数组进行排序,重新开辟一个新数组num;
将原数组nums所有拷贝到num里,在对num进行排序;设置最后一位下标为end,再比较end和(end-1)上的值;
如果满足num[end-1]*2 <= num[end] ,就只需要在原数组中找到这个值的下标并返回;如果不满足就返回-1;
注意如果数组元素<=1;就返回0

代码实现:

int imp(const void* e1, const void* e2)
{return *(int*)e1 - *(int*)e2;
}int dominantIndex(int* nums, int numsSize) {if (numsSize <= 1)//如果数组中元素只有一位就返回0;return 0;int num[100];//创造一个新数组进行排序;int i = 0;for (i = 0; i < numsSize; i++)//拷贝进新数组{num[i] = nums[i];}qsort(num, numsSize, sizeof(int), imp);//进行排序int end = numsSize - 1;//设置end为最后一个下标;float sum=num[end-1]*2;//if (sum <= num[end]){for (i = 0; i < numsSize; i++)//在原来数组中找到相同的值{if (num[end] == nums[i]){return i;//找到原下标并返回;}}}return -1;//否则返回-1;
}

第二题


地址:oj地址


在这里插入图片描述

解题思路:

注意自除数里不包含0。
根据自除数的定义,如果一个整数不包含 0 且能被它包含的每一位数整除,则该整数是自除数。 判断一个整数是否为自除数的方法是遍历整数的每一位,判断每一位数是否为 0 以及是否可以整除该整数。
遍历每一位整数的方法是:每次将当前整数对 10 取模即可得到当前整数的最后一位,然后将该整数除10,重复该操作,直到当前整数变成 0时,就代表了遍历完了整数的每一位,遍历完后就将该整数存入要返回的数组;

代码实现:

int* selfDividingNumbers(int left, int right, int* returnSize){int *arr=(int*)malloc(sizeof(int)*(left+right));//开辟一块足够大小的空间int i=0;int j=0;for(i=left;i<=right;i++)//进行遍历{int n=i;//保存一下该值while(n%10!=0 && i%(n%10)==0)//判断该整数不包含0,并且保证整数的每一位都能整除该整数{if(n/10){n/=10;continue;}else{arr[j]=i;//遍历完该整数,就存入返回数组j++;break;}}}*returnSize=j;return arr;
}

第三题


地址:oj地址


在这里插入图片描述

解题思路:Boyer-Moore 投票算法
把众数记为+1,其他的数记为-1;将它们全部加起来,显然和大于0,从结果本身我们可以看出众数比其他数多。
具体过程:
首先设置一个变量edg为记录众数值;在创造一个count来记录众数的个数,假如数组首元素就是众数,一开始就将count =1;遍历数组时,将edg与nums[i]进行比较,如果相等就+1,如果不同就-1,如果count==0时,需要改众数值,将edg改为nums[i+1];

代码实现:

int majorityElement(int* nums, int numsSize){int edg=nums[0];//假如数组首元素就是众数int i=0;int count=1;//因为首元素就是众数,已经+1了for(i=1;i<numsSize;i++)//进行遍历{if(edg==nums[i])//相等就+1{count++;}else//不等就-1{count--;if(count==0){edg=nums[i+1];//修改众数的值}}}return edg;}

第四题


地址:oj地址


在这里插入图片描述

解题思路:左右乘积列表

  • 初始化两个空数组:LR。对于定索引 iL[i]代表的是i左侧所有数字的的乘积;R[i]代表的是i右侧所有数字的乘积;
  • 然后两个循环来补充LR数组,对于L数组L[0]为1,因为第一个元素左边是没有元素的,对于其他的是:L[i]=L[i-1]*nums[i-1];
    在这里插入图片描述

同理R数组R[numsSize-1]为1,因为最后一个元素的右边没有元素,对于其他的是:R[i]=R[i+1]*nums[i+1];
在这里插入图片描述

  • 补充完LR后,我们只需要在返回数组上迭代,定索引i处的值:L[i]*R[i];

代码实现:

static int answer[1000000];
int* productExceptSelf(int* nums, int numsSize, int* returnSize){int L[numsSize];int R[numsSize];int i=0;//左边元素所有乘积L[0]=1;for(i=1;i<numsSize;i++){L[i]=L[i-1]*nums[i-1];}//右边元素所有乘积R[numsSize-1]=1;for(i=numsSize-1-1;i>=0;i--){R[i]=R[i+1]*nums[i+1];}for(i=0;i<numsSize;i++)//迭代返回数组{answer[i]=R[i]*L[i];}*returnSize=numsSize;return answer;
}

总结

在这期文章中写了几道编程题,如果还有更好的方法的老铁,可以在评论区里面一起进行讨论哦,在后面随着小孩的知识储备越多,小孩肯定还会加以优化优化!!


到了最后:感谢支持

我还想告诉你的是:
------------对过程全力以赴,对结果淡然处之
也是对我自己讲的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/118782.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

远程访问Linux的DataEase数据可视化分析,有哪些推荐的工具?

DataEase 是开源的数据可视化分析工具&#xff0c;帮助用户快速分析数据并洞察业务趋势&#xff0c;从而实现业务的改进与优化。是开源的数据可视化分析工具&#xff0c;帮助用户快速分析数据并洞察业务趋势&#xff0c;从而实现业务的改进与优化。 在本地搭建后,借助cpolar 内…

r 安装源码包 安装本地r包

总结一下手动安装R包 - 简书 (jianshu.com)https://www.jianshu.com/p/2a7a36414734 #BiocManager::install("simplifyEnrichment") #BiocManager::install("EnsDb.Hsapiens.v86")#下载包 之后 手动安装 #install.packages("~/datasets/EnsDb.Hsapien…

Unity 粒子特效遮罩(ParticleMask)

1.需求&#xff1a; 游戏中粒子特效能实现非常好的效果&#xff0c;但是由于粒子特效是独立的系统&#xff0c;Unity自带的Mask普通的遮罩&#xff0c;遮不住粒子特效。 2.实现原理&#xff1a; 通过shader把超出范围的粒子纹理(Texture)&#xff0c;改成透明颜色&#xff0…

opencv android sdk 使用中的问题

Plugin with id ‘kotlin-android’ not found 在build.gradle(:app)中添加以下内容 buildscript {ext {Kotlin_Verion "1.9.10"}dependencies {classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$Kotlin_Verion"}repositories {mavenCentral()} …

stm32----SPI协议

一、概述 SPI&#xff08;Serial Peripheral Interface&#xff0c;串行外围设备接口&#xff09;&#xff0c;是Motorola公司提出的一种同步串行接口技术&#xff0c;是一种高速、全双工、同步通信总线&#xff0c;在芯片中只占用四根管脚用来控制及数据传输&#xff0c;节约…

docker linux(centos 7) 安装

这是个目录 1:安装1:手动安装(适用于centos7)之一2:手动安装(适用于centos7)之二3&#xff1a;一键安装docker4:二进制安装1&#xff1a;下载二进制包2&#xff1a;解压3&#xff1a;移动文件4&#xff1a;后台运行docker5&#xff1a;测试 dicker命令表999&#xff1a;遇到的问…

华为数通方向HCIP-DataCom H12-821题库(单选题:181-200)

第181题 某管理员需要创建AS Path过滤器(ip as-path-iter),允许AS_Path中包含65001的路由通过,那么以下哪一项配置是正确的? A、​​ip as-path-filter 1 permit 65001​​ B、​​ip as-path-filter 1 permit "65001​​ C、​​ip as-path-filter 1 permit *6500…

2023高教社杯数学建模思路 - 案例:ID3-决策树分类算法

文章目录 0 赛题思路1 算法介绍2 FP树表示法3 构建FP树4 实现代码 建模资料 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 算法介绍 FP-Tree算法全称是FrequentPattern Tree算法&#xff0c;就是频繁模…

2023开学礼《乡村振兴战略下传统村落文化旅游设计》许少辉新财经理工 ​​​

2023开学礼《乡村振兴战略下传统村落文化旅游设计》许少辉新财经理工 ​​​

如何高性能、高效率地实现3D Web轻量化?

随着互联网和Web技术的发展&#xff0c;3D Web应用的需求越来越多。然而&#xff0c;复杂的3D模型在Web上展示 和交互通常需要大量的带宽和计算资源。 为了解决这一问题&#xff0c;HOOPS技术作为一套专业的3D图形技术开发工具包&#xff0c;发挥着关键作用。本文 将探讨HOO…

12. 自动化项目实战

目录 1. 登录测试 2. 测试首页的帖子列表数不为0 3. 帖子详情页校验 4. 发布帖子 5. 退出登录 自动化项目实施的基本流程如下图所示&#xff1a; 手工测试用例、自动化测试用例。 1. 登录测试 校验登录后主页显示的用户名称和登录时输入的用户名是否相等。 public class…

java八股文面试[数据库]——慢查询优化

分析慢查询日志 直接分析慢查询日志&#xff0c; mysql使用explain sql语句进行模拟优化器来执行分析。 oracle使用explain plan for sql语句进行模拟优化器来执行分析。 table | type | possible_keys | key |key_len | ref | rows | Extra EXPLAIN列的解释&#xff1a; ta…

Java应用CPU占用过高故障排除

一、背景 最近测试反馈测试环境接口偶现有访问超时&#xff0c;然后APP提示是网络失败&#xff0c;看了一下测试环境的应用完全没啥问题&#xff0c;一直以为是网络问题。 今天测试有反馈了&#xff0c;赶紧看了一下测试服务器&#xff0c;这次终于有症状了&#xff0c;CPU直…

java八股文面试[多线程]——一个线程两次调用start()方法会出现什么情况

典型回答&#xff1a; Java 的线程是不允许启动两次的&#xff0c;第二次调用必然会抛出 IllegalThreadStateException&#xff0c;这是一种运行时异常&#xff0c;多次调用 start 被认为是编程错误。 通过线程的状态图&#xff0c;在第二次调用 start() 方法的时候&#xff…

构建知识库——一文解决跨平台科研文献及笔记同步问题

文章目录 需求及目标现有方案调研文献管理方案云存储方案Markdown编辑器Windows端Ipad端 图床管理方案 最终方案操作流程最后 作为一个十级懒人&#xff0c;要么躺着要么在探寻提效工具的路上。 开始打工生涯之后&#xff0c;除了正常工作时间&#xff0c;总想利用业余时间提升…

恢复已删除的git分支

1.打开对应项目文件夹目录,在目录下执行git命令 2.执行命令 git reflog --dateiso , 找到最后一次commit 的id 3. 执行git checkout -b 新建分支名称 commitId 就会基于commitId这次提交时工作区新建一个分支&#xff0c;就能达到我们找到删除分支的代码效果。 4.直接看ide…

【Locomotor运动模块】瞬移

文章目录 一、原理二、两种类型1、Instant(立刻)2、Dash&#xff08;猛冲&#xff09; 三、瞬移区域、瞬移点1、瞬移区域2、瞬移点 一、原理 抛物线指针选择好目标位置&#xff0c;然后告诉瞬移预设体&#xff1a;你想法把游戏区域弄到目标位置来 解释&#xff1a;抛物线指针选…

设计模式—观察者模式(Observer)

目录 思维导图 一、什么是观察者模式&#xff1f; 二、有什么优点吗&#xff1f; 三、有什么缺点吗&#xff1f; 四、什么时候使用观察者模式&#xff1f; 五、代码展示 ①、双向耦合的代码 ②、解耦实践一 ③、解耦实践二 ④、观察者模式 六、这个模式涉及到了哪些…

在 Python 中构建卷积神经网络; 从 0 到 9 的手绘数字的灰度图像预测数字

一、说明 为了预测从0到9的数字&#xff0c;我选择了一个基于著名的Kaggle的MNIST数据集的数据集。数据集包含从 <0> 到 <9> 的手绘图数字的灰度图像。在本文中&#xff0c;我将根据像素数据&#xff08;即数值数据&#xff09;和卷积神经网络预测数字。 二、 卷积…

智能合约安全分析,针对 ERC777 任意调用合约 Hook 攻击

智能合约安全分析&#xff0c;针对 ERC777 任意调用合约 Hook 攻击 Safful发现了一个有趣的错误&#xff0c;有可能成为一些 DeFi 项目的攻击媒介。这个错误尤其与著名的 ERC777 代币标准有关。此外&#xff0c;它不仅仅是众所周知的黑客中常见的简单的重入问题。 这篇文章对 …