C语言练习7(巩固提升)
C语言练习7
- 编程题
前言
“芳林新叶催陈叶,流水前波让后波。”改革开放40年来,我们以敢闯敢干的勇气和自我革新的担当,闯出了一条新路、好路,实现了从“赶上时代”到“引领时代”的伟大跨越。今天,我们要不忘初心、牢记使命,继续以逢山开路、遇水架桥的开拓精神,开新局于伟大的社会革命,强体魄于伟大的自我革命,在我们广袤的国土上继续书写13亿多中国人民伟大奋斗的历史新篇章!
编程题
一,输入一个整数,将这个整数以字符串的形式逆序输出,程序不考虑负数的情况,若数字含有0,则逆序形式也含有0,如输入为100,则输出为001。
数据范围: 1 <= n <= 2^30 - 1
输入描述:输入一个int整数。
输出描述:将这个整数以字符串的形式逆序输出。
OJ链接【牛客网题号: HJ11 数字颠倒】【难度:简单】
示例:
输入:1516000
输出:0006151
💡分析:
这道题只需要循环取出一个数字的每一位进行单独打印,打印完毕后换行即可。而获取数据的每一位,可以通过取每次对数字模和除以 10 来完成
🔑 代码实现
//HJ11 数字颠倒
int main()
{int num = 0;while (~scanf("%d", &num))//输入一个数字{if (num == 0)//若等于0则直接打印{printf("%d", num);continue;}while (num > 0)//若大于零%10得到个位{printf("%d", num % 10);num /= 10;//去掉取出的数}}return 0;
}
💯运行结果:
二,对字符串中的所有单词进行倒排。
说明:
1、构成单词的字符只有26个大写或小写英文字母;
2、非构成单词的字符均视为单词间隔符;
3、要求倒排后的单词间隔符以一个空格表示;如果原字符串中相邻单词间有多个间隔符时,倒排转换后也只
允许出现一个空格间隔符;
4、每个单词最长20个字母;
OJ链接【牛客网题号: HJ31 单词倒排】【难度:简单】
示例:
输入:I am a student
输出:student a am I
💡分析:
这道题的解题思路不难,定义一个字符指针数组,用于保存每个单词的起始字符地址,接下来将非字母字符全部替换成为字符串结尾标志,则单词字符字母遇到结尾就结束了,相当于把一个字符串以非字母字符进行切割成为了多个字符串,最终对字符指针数组进行逆序打印每个单词即可。
🔑 代码实现
#include <stdio.h>
#include <string.h>
//HJ31 单词倒排
int main()
{char str[10001] = { 0 };//字符串最长10000int row = 0;while (gets(str) > 0) {char* ptr = str;char* word[10000] = { NULL };while (*ptr != '\0') {//如果是个字母字符,则是单词的起始字符if (('z' >= *ptr && *ptr >= 'a') || ('Z' >= *ptr && *ptr >= 'A')) {word[row++] = ptr;//保存每个单词的起始地址//把本次的单词字母字符走完,直到遇到非字母字符while (*ptr != '\0' &&(('z' >= *ptr && *ptr >= 'a') || ('Z' >= *ptr && *ptr >= 'A'))) {ptr++;}continue;//不能继续向下,因为下边的ptr++会跳过当前的非字母字符}*ptr = '\0';//把非字母的数据全部替换为结尾标志ptr++;}for (int i = row - 1; i >= 0; i--){printf("%s ", word[i]);//针对所有单词的起始地址逆序开始打印即可}printf("\n");}
}
💯运行结果:
三,1、给定一个二进制数组, 计算其中最大连续 1 的个数。
leetcode【 leetcode 题号:485. 最大连续 1 的个数】【难度:简单】
示例:
输入:[1,1,0,1,1,1]
输出:3
解释:开头的两位和最后的三位都是连续 1 ,所以最大连续 1 的个数是 3
💡分析:
这道题思路比较简单,统计连续1的个数,遇到0时表示连续中断,判断如果当前的统计数大于之前最大的则替换,然后继续下一个位置开始的统计即可。
🔑 代码实现
int findMaxConsecutiveOnes(int* nums, int numsSize)
{int max_count = 0;int cur_count = 0;int i = 0;for (i = 0; i < numsSize; i++){if (nums[i] == 1){cur_count++;}else{max_count = max_count > cur_count ? max_count : cur_count;cur_count = 0;}}max_count = max_count > cur_count ? max_count : cur_count;return max_count;
}
四,求输出n以内(含n)完全数的个数。完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数。它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身。
例如:28,它有约数1、2、4、7、14、28,除去它本身28外,其余5个数相加,1+2+4+7+14=28。
注意:本题输入含有多组样例。
输入描述:输入一个数字n
输出描述:输出不超过n的完全数的个数
OJ链接【牛客网题号: HJ56 完全数计算】【难度:简单】
示例:
输入:1000 7 100
输出:3 1 2
💡分析:
🔑 代码实现
int is_perfect_num(int num)
{int sum = 1;int i = 0;for (i = 2; i <= sqrt(num); i++){if (num % i == 0){sum += i;if (i != sqrt(num))sum += num / i;}}if (sum == num)return 1;return 0;
}
int main()
{int n = 0;while (~scanf("%d", &n)){int count = 0;int i = 0;for (i = 2; i <= n; i++){if (is_perfect_num(i)){count++;}}printf("%d\n", count);}return 0;
}
💯运行结果:
五,给你一个含 n 个整数的数组 numvs ,其中 nums[i] 在区间 [1, n] 内。请你找出所有在 [1, n] 范围内但没有出
现在 nums 中的数字,并以数组的形式返回结果。
leetcode【 leetcode 题号:448. 找到所有数组中消失的数字】【难度:简单】
示例:
输入:nums = [4,3,2,7,8,2,3,1]
输出:[5,6]
输入:nums = [1,1]
输出:[2]
💡分析:
numsSize 大小的数组,其中每个元素的数据在 [1, numsSize] 区间之内,解法其实并不复杂,以数组元素的绝对值作为下标,将对应位置的数据置为负数,比如 0 号位置是 3 ,则把 3 号位置的数据重置为负值,等到数组遍历重置完毕,只有缺失的这个数字对应的位置保留正数,其他出现过的数字位置都会是负数, 要注意不要重复设置负数,因为负负得正。
示例:
[2, 3, 3, 2, 4] 注意数组10个元素,值为[1-10], 但是访问下标应该在[0-9]之内,因此修改位置下标应该是值-1
0号元素是2,则将1号位置置为对应负值 [2, -3, 3, 2, 4]
1号元素是3,则将2号位置置为对应负值 [2, -3, -3, 2, 4]
2号元素是-3,绝对值为3,将2号位置为负值,但是2号位已经重置过,不需要重置,否则会变正数[2, -3, -3, 2, 4]
3号元素是-2,绝对值为2,将1号位置为负值,但是1号位已经重置过,不需要重置,否则会变正数[2, -3, -3, 2, 4]
4号元素是4,则将3号位置置为对应负值 [2, -3, -3, -2, 4]
遍历数组得到0,4两个位置的数据是大于0的,因为人家数值从1开始,因此+1后得到1, 5两个缺失的数字
🔑 代码实现
int* findDisappearedNumbers(int* nums, int numsSize, int* returnSize)
{for (int i = 0; i < numsSize; i++){if (nums[abs(nums[i]) - 1] > 0)nums[abs(nums[i]) - 1] = -(nums[abs(nums[i]) - 1]);}int* ret = (int*)malloc(sizeof(int) * (numsSize));*returnSize = 0;for (int i = 0; i < numsSize; i++){if (nums[i] > 0) {ret[*returnSize] = i + 1;*returnSize += 1;}}return ret;
}
六,写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
数据范围:两个数都满足 0≤n≤1000
OJ链接【牛客网题号: JZ65 不用加减乘除做加法】【难度:简单】
示例:
输入:1,2
返回值:3
💡分析:
十进制相加思想: 15+07 , 先计算不考虑进位的相加结果 12 (因为 5+7 的不考虑进位的结果是 2 ,遇 10 进位嘛),然后计算进位 5+7 进位是 10 ,则 10 与 12 再次相加,得到 22 ,进位为 0 ,则计算到此结束。
这里使用二进制求和完成,思想类似,但是二进制计算相加和进位不需要使用 + 符号
二进制相加思想:与十进制相同,先计算不考虑进位的相加结果( 0+0 得 0 , 1+1 进位得 0 , 1+0 得 1 ),使用异或可以取得; 然后计算相加的进位结果(同 1 的位置左移一位即可),使用相与后左移取得。
示例:
5 0101 + 7 0111
不考虑进位的相加结果 0101^0111 -> 0010
相加的进位 0101&0111 -> 0101 因为进位左移得到 1010
1010 + 0010
不考虑进位的相加结果 1010 ^ 0010 -> 1000
相加的进位 1010 & 0010 -> 0010 因为进位左移得到 0100
1000 + 0100
不考虑进位的相加结果 1000 ^ 0100 -> 1100
相加的进位 1000 & 0100 -> 0000 进位为0结束运算
🔑 代码实现
int Add(int num1, int num2)
{while (num2 != 0) {//进位不为0则持续与相加结果进行相加int tmp = num1 ^ num2;//得到每位相加不考虑进位的数据num2 = (num1 & num2) << 1;//同1的位相加则会进位num1 = tmp;}return num1;
}
七,给你一个长度为 n 的整数数组 nums ,其中 n > 1 ,返回输出数组 output ,其中 output[i] 等于 nums 中除nums[i] 之外其余各元素的乘积。
提示:题目数据保证数组之中任意元素的全部前缀元素和后缀(甚至是整个数组)的乘积都在 32 位整数范围内。
leetcode【 leetcode 题号:238. 除自身以外数组的乘积】【难度:中等】
示例:
输入: [1,2,3,4]
输出: [24,12,8,6]
💡分析:
🔑 代码实现
int Add(int num1, int num2)
{while (num2 != 0) {//进位不为0则持续与相加结果进行相加int tmp = num1 ^ num2;//得到每位相加不考虑进位的数据num2 = (num1 & num2) << 1;//同1的位相加则会进位num1 = tmp;}return num1;
}
八,自除数 是指可以被它包含的每一位数除尽的数。例如, 128 是一个自除数,因为 128 % 1 == 0 , 128 % 2 ==0 , 128 % 8 == 0 。还有,自除数不允许包含 0 。给定上边界和下边界数字,输出一个列表,列表的元素是边界(含边界)内所有的自除数。
leetcode【 leetcode 题号:728. 自除数】【难度:简单】
示例:
输入:上边界left = 1, 下边界right = 22
输出: [1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 15, 22]
💡分析:
暴力不考虑其他的因素的话,将所有数据乘积起来,然后遍历数组除以当前位置数据即可。
更优解法:将乘积分为两次进行,第一次先将每个位置左边的数据乘积计算出来放到返回数组中,后边第二次循环将对应位置右边的数据乘积计算出来与返回数组对应位置的左半边乘积相乘得到结果。
示例: 一个数组 int nums[ ] = {2, 3, 4} 。
int left = 1, right = 1;
计算左侧乘积:
第0个元素的左边乘积, arr[0] = left 然后计算第1位左侧乘积 left*=nums[0] -> left = 12
第1个元素的左边乘积, arr[1] = left 然后计算第2位左侧乘积 left=nums[1] -> left = 123
第2个元素的左边乘积, arr[2] = left 然后计算第3位左侧乘积 已经没必要了,因为第2元素是末尾元素了
一次循环完毕后,返回数组中每个元素存储的都是自己左侧元素的乘积。 arr[]中的值: [1, 2, 6]
计算右侧乘积:
第2个元素的右边乘积, arr[2] = right 然后计算第1位右侧乘积 right=nums[2] -> right =14
第1个元素的右边乘积, arr[1] = right 然后计算第0位右侧乘积 right=nums[1] -> right =143
第0个元素的右边乘积, arr[0] = right 然后计算第-1位右侧乘积 -1位已经不需要计算了
循环完毕后,返回数组中的每个元素都是其他元素的乘积了 arr[2]=1; arr[1]=4; arr[0]*=12
🔑 代码实现
int* selfDividingNumbers(int left, int right, int* returnSize)
{int* ret = (int*)calloc(1000, sizeof(int));//动态申请足够大的空间用于存放返回的自除数*returnSize = 0;for (int i = left; i <= right; i++) {int num = i;while (num) {int remainder = num % 10;//计算余数if (remainder == 0 || (i % remainder) != 0) {//判断i自身与余数取模是否为0break;}num /= 10;}//如果num==0表示通过了每一位数的取模判断,则i就是自除数if (num == 0) ret[(*returnSize)++] = i;}return ret;
}
💘后期会推出更多C语言练习题,希望大家与我共同进步,早日成为大佬!
相关文章:

C语言练习7(巩固提升)
C语言练习7 编程题 前言 “芳林新叶催陈叶,流水前波让后波。”改革开放40年来,我们以敢闯敢干的勇气和自我革新的担当,闯出了一条新路、好路,实现了从“赶上时代”到“引领时代”的伟大跨越。今天,我们要不忘初心、牢记…...
golangORM框架Gorm
ORM框架Gorm gorm简介gorm声明模型gorm连接到数据库gorm创建记录gorm查询记录gorm高级查询gorm更新gorm删除SQL 构建器gorm Belongs To关系gorm Has One关系gorm Has Many关系gorm Many To Many关系gorm 实体关联gorm 会话gorm事务Gorm总结...

Python项目实战之《飞机大战游戏》
目录 一、Pygame库包简介 二、Pygame安装 三、项目开发思路 3.1前言 3.2飞机大战开发步骤 一、Pygame库包简介 Pygame是一个基于python的游戏开发库,它提供一系列的工具和接口,使开发人员能够轻松的创建各种类型的游戏,包括2D游戏和简单…...

Mysql数据库(2)—事务和锁
一、事务 数据库事务的特性? 数据库事务的四大特性是ACID。 原子性:就是所有操作要么全不做,要不全做。通过undo日志来实现。一致性:就是在并发情况下数据库由一个状态转移到另一个状态的数据要一致。通过事务的隔离级别来实现…...

Shell - 加固系统配置
文章目录 #! /bin/bash # Function:对账户的密码的一些加固 read -p "设置密码最多可多少天不修改:" A read -p "设置密码修改之间最小的天数:" B read -p "设置密码最短的长度:" C read -p "设置密码失效…...
【linux】记录archlinux软件包更新后lualatex无法编译的一种解决方案
1 环境参数 操作系统:archlinux Kernel: 6.4.11-arch2-1 包管理器:pacman 日期:2023.08.25 2 问题描述 今天一如往常地进行软件包更新: sudo pacman -Syu随后,在使用luelatex对我的论文(latex)…...

设计模式中的关系
文章目录 一、依赖概念 二,关联概念 三、聚合概念 四、组合概念 五、实现概念 六、继承概念 图总结整体总结 一、依赖 概念 依赖是一种临时使用关系,代码层体现为作为参数。 具体体现:依赖者调用被依赖者的局部变量、参数、静态方法&#…...

C语言之数组题
目录 1.使用函数实现数组操作 2.冒泡排序 3.三子棋 4.【一维数组】交换数组 5.扫雷 6.概念辨析tips 我又来了,今天是数组题,本人还在补军训真的热!🆗 1.使用函数实现数组操作 2.冒泡排序 3.三子棋 4.【一维数组】交换数组 …...
DbContext是Entity Framework中的一个核心类
Entity Framework(简称EF)是ADO.NET的一部分,是一个开源的、通用的对象关系映射(ORM)框架,它使得开发人员可以用面向对象的方式来操作关系数据库。 以下是Entity Framework的一些主要特性: 它…...

BTC价格预测:灰度突如其来的胜利是否会打破“九月魔咒”?
加密市场即将进入第三季度交易的最后阶段,由于9月份被视为是比特币的下跌时期,大多数投资者都预测加密货币之王将会进一步下跌。然而,事情却发生了逆转,灰度突如其来的胜利是否会打破“九月魔咒”? 受该事件影响&#…...
软件测试/测试开发丨Selenium 高级控件交互方法
点此获取更多相关资料 本文为霍格沃兹测试开发学社学员学习笔记分享 原文链接:https://ceshiren.com/t/topic/27045 一、使用场景 使用场景对应事件复制粘贴键盘事件拖动元素到某个位置鼠标事件鼠标悬停鼠标事件滚动到某个元素滚动事件使用触控笔点击触控笔事件&am…...
算法通关村-----二分查找在二叉搜索树中的应用
二叉搜索树中搜索特定值 问题描述 给定二叉搜索树(BST)的根节点 root 和一个整数值 val。你需要在 BST 中找到节点值等于 val 的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 null 。详见leetcode700 代码实现 public TreeNod…...
总结限流、降级与熔断的区别
限流、熔断与降级是流量过大时,通过一定的方式去保护系统的手段,是应对海量流量的三大“杀器”。 限流 限流是从系统的流量入口考虑,从进入的流量上进行限制,通过对并发访问进行限速,达到保护系统的作用。限制并发请求…...

windows下安装go环境 和vscode中go扩展+调试
1. 首先安装GO Go下载地址:go.dev 选择相对应的版本,下载,运行安装程序,并打开命令提示符,运行 go env ,确认已经安装go 注意关注其中GOPATH和GOROOT,这两个地址可以在系统环境变量中进行设置…...
销毁 ECharts 图表
如果想销毁 ECharts 图表,可以使用 dispose 方法。这个方法会销毁图表,并释放所有的资源。 以下是如何使用 dispose 方法的示例: var myChart echarts.init(document.getElementById(main)); // 在需要销毁图表的时候 myChart.dispose(); …...

并发编程的故事——Java线程
Java线程 文章目录 Java线程一、线程创建二、线程运行三、线程运行四、主线程和守护线程五、线程的五种状态六、线程的六种状态七、烧水泡茶案例 一、线程创建 创建线程方法一: Thread重写run方法 Slf4j(topic "c.MyTest1") public class MyTest1 {publ…...
菜鸟教程《Python 3 教程》笔记(13):迭代器与生成器
菜鸟教程《Python 3 教程》笔记(13) 13 迭代器与生成器13.1 迭代器13.1.1 创建一个迭代器13.1.2 StopIteration 13.2 生成器13.3 yield 使用浅析13.3.1 通过 iterable 对象来迭代13.3.2 使用 isgeneratorfunction 判断13.3.3 类的定义和类的实例13.3.4 r…...

ceph架构及 IO流程
CEPH是由多个节点构成的集群,它具有良好的可扩展性和可靠性。节点之间相互通信以达到: 存储和检索数据 数据复制 监控集群的健康状况 保证数据的完整性 检测故障并恢复 基本架构如下图: 分布式对象存储系统RADOS是CEPH最为关键的技术&a…...
ssh 基本用法与免密登录
基本用法 远程连接服务器: ssh userhostname user:用户名hostname:IP地址或域名 举个例子,假设我们的user是tom,hostname是123.45.67.890 可以输入:ssh tom123.45.67.890 第一次登陆时会提示:…...

Unity3D 如何在ECS架构下,用Unity引擎进行游戏开发详解
前言 Unity3D是一款强大的游戏引擎,它提供了丰富的功能和工具,可以帮助开发者快速构建高质量的游戏。而Entity Component System(ECS)是Unity3D中一种新的架构模式,它可以提高游戏的性能和可扩展性。本文将详细介绍在…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》
引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...

大型活动交通拥堵治理的视觉算法应用
大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...

抖音增长新引擎:品融电商,一站式全案代运营领跑者
抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...
Python爬虫(二):爬虫完整流程
爬虫完整流程详解(7大核心步骤实战技巧) 一、爬虫完整工作流程 以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明: 1. 目标分析与前期准备 网站技术分析: 使用浏览器开发者工具(F12&…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)
笔记整理:刘治强,浙江大学硕士生,研究方向为知识图谱表示学习,大语言模型 论文链接:http://arxiv.org/abs/2407.16127 发表会议:ISWC 2024 1. 动机 传统的知识图谱补全(KGC)模型通过…...

微信小程序云开发平台MySQL的连接方式
注:微信小程序云开发平台指的是腾讯云开发 先给结论:微信小程序云开发平台的MySQL,无法通过获取数据库连接信息的方式进行连接,连接只能通过云开发的SDK连接,具体要参考官方文档: 为什么? 因为…...
3403. 从盒子中找出字典序最大的字符串 I
3403. 从盒子中找出字典序最大的字符串 I 题目链接:3403. 从盒子中找出字典序最大的字符串 I 代码如下: class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...

GitFlow 工作模式(详解)
今天再学项目的过程中遇到使用gitflow模式管理代码,因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存,无论是github还是gittee,都是一种基于git去保存代码的形式,这样保存代码…...

elementUI点击浏览table所选行数据查看文档
项目场景: table按照要求特定的数据变成按钮可以点击 解决方案: <el-table-columnprop"mlname"label"名称"align"center"width"180"><template slot-scope"scope"><el-buttonv-if&qu…...