C语言之练习题

在这里插入图片描述

欢迎来到我的:世界

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


目录

  • 内容
    • 第一题:加一
    • 第二题:移动零
    • 第三题 :分发饼干
    • 第四题:买股票的最佳时机
    • 第五题:丢失的数字
  • 总结

内容

再会

第一题:加一

地址:oj地址

在这里插入图片描述

解题思路:暴力求解
这道题就像是整形数字的十进一,因为是个数组,只要不是首位需要进位,其内存空间不需要改变,并且给最后位的元素+1
可分为以下几种情况:
1.个位需要进位:{1,2,9}+1={1,3,0};
2.除去首位的其他位的进位:{1,9,9}+1={2,0,0};
3.首位进位:{9,9,9}+1={1,0,0,0} (这种情况比较特殊,需要开辟一块原来空间+1的空间,并且所有元素赋值为0,最后首元素赋值1)

int* plusOne(int* digits, int digitsSize, int* returnSize) {
	//从个位开始遍历
    for (int i = digitsSize - 1; i >= 0; i--)
    {
    	//从个位+1,判断是否需要进位
        digits[i] = digits[i] + 1;
        //如果个位+1后不为10,则可以直接返回数组
        if (digits[i] != 10)
        {
            *returnSize = digitsSize;
            return digits;
        }
        else
            digits[i] = 0;//若为10,则可以把改为0
    }
    //开辟一块比原来空间+1的空间,题目要求必须malloc函数开辟,
    int* pa = (int*)malloc(sizeof(int) * (digitsSize + 1));
    //而malloc函数开辟的空间不会进行初始化,需要将空间所有元素赋值为0;
    memset(pa, 0, sizeof(int) * (digitsSize + 1));
    pa[0] = 1;//既然首元素做高位进位,则直接赋值最高位为1即可;
    *returnSize = digitsSize + 1;
    return pa;
}

对这题其实判断元素是否为9,还是给元素+1后判断是否为10;这两种的思路解决方式是一样的,所以这里就不多嘴了,大家可以试一试另一种;

第二题:移动零


地址:oj地址


在这里插入图片描述

解题思路:
思路1:暴力求解遍历一遍数组,遇到0就将0后面的元素一个一个往前覆盖,并且记录下0的个数x个,等所有元素遍历完,就将0从数组从后往前补x个;
思路2:双指针法创建两个指针 j i,分别用于跟踪非零元素的位置和当前遍历到的位置,起始位置均为 0。j负责找非0的数值,i负责找0,在进行交换数值;

暴力求解

void moveZeroes(int* nums, int numsSize) {
    // 计算数组中0的个数
    int count = 0;

    int i = 0;
    int j = 0;
    //即在整个数组中遍历
    while (j < numsSize) {
        //计算需要补零的个数
        if (nums[j] == 0) {
            count++;
        } 
        else {
            //遍历将不为0的数放置数组前方
            nums[i] = nums[j];
            i++;
        }
        j++;
    }
    //在后面补零
    while (count--) {
        nums[j - 1] = 0;
        j--;
    }
}

双指针法

void moveZeroes(int* nums, int numsSize) {
    int i=0,j=0;
    //开始遍历
    while(j<numsSize)
    {
    	//当j位置不为0时,进行交换
        if(nums[j])
        {
            int tem=nums[i];
            nums[i]=nums[j];
            nums[j]=tem;
            i++;
        }
        //当j位置为0时,继续往前走,直到找到0
        j++;
    }
}

第三题 :分发饼干


地址:oj地址


在这里插入图片描述

思路一:排序法::将两个数组g s进行由大到小排序,这样最大胃口的小孩,和最大尺寸的饼干都在数组开始了,这样能够更好的遍历,再创建一个记录满足小孩的个数count,在分别遍历两个数组,找到:s 数组饼干尺寸能满足 g数组的小孩胃口的饼干,若能满足,应该进行判断:不能跳出了饼干数组,则count ++,最后等饼干数组遍历完或者小孩数组遍历完,返回count

动画演示
-在这里插入图片描述

排序法实现

int cmp(int* a, int* b) {
    return *a - *b;
}

int findContentChildren(int* g, int gSize, int* s, int sSize) {
	//进行排序
    qsort(g, gSize, sizeof(int), cmp);
    qsort(s, sSize, sizeof(int), cmp);
    int m = gSize, n = sSize;
    //记录满足小孩的个数
    int count = 0;
    //进入遍历
    for (int i = 0, j = 0; i < m && j < n; i++, j++) {
    	//找到能够满足最大胃口小孩的饼干
        while (j < n && g[i] > s[j]) {
            j++;
        }
        //找到后,要判断,下标不能超过数组;
        if (j < n) {
            count++;//找到了能匹配的饼干和小孩,在往后去寻找,直到某个数组遍历完
        }
    }
    return count;
}

第四题:买股票的最佳时机


地址:oj地址


在这里插入图片描述

第一种思路:暴力求解法::我们需要记录最小价格值,并且遍历后面的数值的价格 减去最小价格=利润,遍历完后最后的利润就是最大利润;
在这里插入图片描述

int maxProfit(int* prices, int pricesSize) {
    int min = prices[0];//假设这就是最小价格数值
    int max = 0;//开始时设最大利润值为0
    for (int i = 0; i < pricesSize; i++) {
    	//遍历找那个最小的价格值
        if (min > prices[i])
            min = prices[i];
		//找出最大的利润值
        if (prices[i] - min > max)
            max = prices[i] - min;
    }
    //返回最大利润值
    return max;
}

第二种思路:暴力双层循环法:::我们需要找出给定数组中两个数字之间的最大差值(即,最大利润)。此外,第二个数字(卖出价格)必须大于第一个数字(买入价格)。


注意:这种方法在力扣上运行会超时

int maxProfit(int* prices, int pricesSize)
{
   int max = 0;
   for (int i = 0; i < pricesSize-1; i++)
   {
       for (int j = i + 1; j < pricesSize; j++)
       {
           int ret = prices[j] - prices[i];//记录每次的利润,找出最大的利润
           if (ret > max)
           {
               max = ret;
           }
       }
   }
   return max;
}

第五题:丢失的数字


地址:oj地址


在这里插入图片描述

思路
暴力遍历法:0~n之间的数加起来在遍历减去nums数组的值,即可;
位运算法:根据出现的次数的奇偶性,可以使用按位异或运算得到丢失的数字:如有个数组[1,0,2,0,1]在这个数组中有些数组是成双出现的,根据 ^按位异或运算:且对任意整数x 都满足:x^x=0,x^0=0,可以将成双的数值互相消除,最后留下单身的那个;所以根据这个思路,可以将nums0~n都看成数组,这两个数组进行按位异或操作,就可以得出最后的那个值;

暴力遍历法:

int missingNumber(int* nums, int numsSize) {
    int sum=0;
    for(int i=0;i<=numsSize;i++)
    {
        sum+=i;
    }
    for(int i=0;i<numsSize;i++)
    {
        sum-=nums[i];
    }

    return sum;
}

对上代码可以这样优化:数学法:
int missingNumber(int* nums, int numsSize) {
int n=numsSize;
int total=n*(n+1)/2; //这里运用的数学的前n项求和
for(int i=0;i<numsSize;i++)
{
total-=nums[i];
}
return total;
}

对于上述代码我觉得可以写成这样:思路是和暴力一样的就是合并到了一个数组进行操作;
int missingNumber(int* nums, int numsSize) {
int sum=0;
for(int i=0;i<numsSize;i++)//这里判断条件 不能等于 否则会越界
{
sum+=(i-nums[i]);
}
return sum+numsSize; //
}

位运算法:

int missingNumber(int* nums, int numsSize) {
    int sum=0;
    for(int i=0;i<numsSize;i++)//这里判断条件 不能等于 否则会越界
    {
        sum^=nums[i];
        sum^=i;
    }
    sum^=numsSize;
    return sum;
}

请添加图片描述


总结


到了最后:感谢支持

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

php中的错误和异常捕获

目录 一&#xff1a; 异常&#xff08;Exceptions&#xff09; 二&#xff1a; 错误&#xff08;Errors&#xff09; 三&#xff1a;实际项目的异常和错误处理 在PHP中&#xff0c;异常&#xff08;Exceptions&#xff09;和错误&#xff08;Errors&#xff09;是两个不同的…

汇总10个AI免费一键生成PPT的网站

一、前言 PPT幻灯片是现代办公和学习中的重要组成部分。它在工作、研究或培训中扮演着重要角色&#xff0c;并能够让观众更好地理解信息。随着当今人工智能技术的快速发展&#xff0c;现在有很多免费的AI PPT生成器可供选择&#xff0c;帮助用户更加便捷地制作出高效且具有较强…

热门短视频素材资源网站推荐

在制作抖音短视频时&#xff0c;选择高质量的素材至关重要。为了帮助短视频创作者获取高清无水印的视频素材&#xff0c;以下是我为大家推荐的六个优质视频素材网站&#xff0c;赶快来看看吧&#xff01; 蛙学网 首先介绍的是蛙学网&#xff0c;作为国内知名的视频素材平台&…

数据结构:二叉树、堆

目录 一.树的概念 二、二叉树 1.二叉树的概念 2.特殊类型的二叉树 3.二叉树的性质 4.二叉树存储的结构 三、堆 1.堆的概念 2.堆的实现 Heap.h Heap.c 一.树的概念 注意&#xff0c;树的同一层中不能有关联&#xff0c;否侧就不是树了&#xff0c;就变成图了&#xff…

C# 条形码、二维码标签打印程序

1、条码标答打印主界面 2、打印设置 3、生成QR代码 private void GetBarcode_T(string lr) { QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();//创建一个对象 qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE; //设置编码测量…

汽车票预订系统:SpringBoot技术革新

5系统详细实现 5.1 用户注册 用户需要注册才可以登录。具体界面的展示如图5.1所示。 图5.1 用户注册界面 5.2 汽车票 用户登录后在后台汽车票信息可以进行预定操作。具体界面如图5.2所示。 图5.2 汽车票界面 5.3 订单 用户可以在订单管理里面对订单信息进行换票和支付操作。…

工作日志:vue3各种警告

1、遇见报错&#xff0c;但也没啥影响&#xff0c;不知怎么回事。 可是我没写过这东西啊。 2、一个警告。 它表示在渲染过程中尝试访问组件实例上不存在的属性linkTags。 解决办法&#xff1a;在该属性前&#xff0c;加个v-if判断。 3、 意味着在模板渲染过程中尝试访问了…

MySQL8.0主从同步报ERROR 13121错误解决方法

由于平台虚拟机宿主机迁移&#xff0c;导致一套MySQL主从库从节点故障&#xff0c;从节点服务终止&#xff0c;在服务启动后&#xff0c;恢复从节点同步服务&#xff0c;发现了如下报错&#xff1a; mysql> show slave status\G; *************************** 1. row *****…

前端求职简历-待补充

当然可以&#xff0c;针对大厂的前端岗位&#xff0c;一个吸引人的简历应该突出你的技术能力、项目经验、教育背景以及任何能体现你学习能力和团队协作能力的证明。以下是一个简历大纲示例&#xff0c;你可以根据自己的实际情况进行调整&#xff1a; 个人信息 姓名联系方式&a…

图文深入介绍oracle资源管理(续)

1. 引言&#xff1a; 本文将承接上篇继续深入介绍oracle资源管理。本文重点介绍如何使用oracle资源管理器管理好DB。 2. 资源管理器&#xff1a; 可以使用图形界面 OEM$或命令行调用 DBMS RESOURCE MANAGER 程序包的过程进行数据库资源管理。 调用资源管理器的先决条件&…

【Android】浅析OkHttp(1)

【Android】浅析OkHttp&#xff08;1&#xff09; OkHttp 是一个高效、轻量级的 HTTP 客户端库&#xff0c;主要用于 Android 和 Java 应用开发。它不仅支持同步和异步的 HTTP 请求&#xff0c;还支持许多高级功能&#xff0c;如连接池、透明的 GZIP 压缩、响应缓存、WebSocke…

大模型~合集13

我自己的原文哦~ https://blog.51cto.com/whaosoft/12302606 #TextRCNN、TextCNN、RNN 小小搬运工周末也要学习一下~~虽然和世界没关 但还是地铁上看书吧, 大老勿怪 今天来说一下 文本分类必备经典模型 模型 SOTA&#xff01;模型资源站收录情况 模型来源论文 RAE ​​ht…

STM32外设应用技术博文:基于UART的温度传感器数据采集

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

深入理解Redis锁与Backoff重试机制在Go中的实现

文章目录 流程图Redis锁的深入实现Backoff重试策略的深入探讨结合Redis锁与Backoff策略的高级应用具体实现结论 在构建分布式系统时&#xff0c;确保数据的一致性和操作的原子性是至关重要的。Redis锁作为一种高效且广泛使用的分布式锁机制&#xff0c;能够帮助我们在多进程或分…

构建高效在线考试平台:Spring Boot与JavaWeb的融合

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及&#xff0c;互联网成为人们查找信息的重要场所&#xff0c;二十一世纪是信息的时代&#xff0c;所以信息的管理显得特别重要。因此&#xff0c;使用计算机来管理基于JavaWeb技术的在线考试系统设计与实现…

汽车零部件行业CRM应用数字化解决方案解析

1.行业背景与挑战分析 近年来&#xff0c;随着国家对新能源汽车行业的大力支持&#xff0c;国内汽车产业不仅在国内市场实现了弯道超车&#xff0c;而且新能源汽车的海外出口也开拓了新的市场&#xff0c;为自主品牌的新能源战略贡献了新的增长点&#xff1b;这一迅猛发展的趋…

Pollard‘s p-1算法

概述 光滑数 (Smooth number)&#xff1a;指可以分解为多个小素数乘积的正整数 当p是N 的因数&#xff0c;并且p−1是光滑数&#xff0c;可以考虑使用Pollards p-1算法来分解N 当p是N的因数&#xff0c;并且p1是光滑数&#xff0c;可以考虑使用Williamss p1算法来分解N 这里…

打造卓越APP体验:13款界面设计软件推荐

你知道如何选择正确的UI设计软件吗&#xff1f;你知道设计美观的用户界面&#xff0c;及带来良好用户体验的APP&#xff0c;需要什么界面设计软件吗&#xff1f;基于APP界面的功能不同&#xff0c;选择的APP界面设计软件也会有所不同。然而&#xff0c;并不是要把所有APP界面设…

权限(补充)

在上一篇Linux权限&#xff08;想了解的可以点击看看哦&#xff09;中已经见识了一部分权限&#xff0c;但是少了很重要的一部分&#xff1a; 那就是用户之间的转换&#xff0c;文件读写的关系&#xff0c;这里就简单的介绍一些&#xff1b; 我们在Linux权限知道了目录权限的关…

无人机之放电速率篇

无人机的放电速率是指电池在一定时间内放出其储存电能的能力&#xff0c;这一参数对无人机的飞行时间、性能以及安全性都有重要影响。 一、放电速率的表示方法 放电速率通常用C数来表示。C数越大&#xff0c;表示放电速率越快。例如&#xff0c;一个2C的电池可以在1/2小时内放…