C语言刷题小记2

前言

本篇博客还是为大家分享一些C语言的OJ题目,如果你感兴趣,希望大佬一键三连。多多支持。下面进入正文部分。

题目1竞选社长

分析:本题要求我们输入一串字符,并且统计个数的多少,那么我们可以通过getchar函数来获取字符;

#include<stdio.h>
int main()
{int ch = 0;int flag = 0;while (((ch = getchar()) != '0') && ch != EOF){if (ch == 'A'){flag++;}if (ch == 'B'){flag--;}}if (flag > 0){printf("A\n");}else if (flag < 0){printf("B\n");}else{printf("E\n");}return 0;
}

这里大家来看代码,注意while循环的停止条件,根据题目要求,当遇到字符0时程序停止;这里的flag相当于一个标志物,用来反映字符的个数变化,当然大家也可以使用计数器来统计,这里因人而异,使用自己习惯的方法就可以。

题目2  移除元素

分析:拿到这道题,大家可能会有一种思路,就是创建一个新数组,然后进行判断,判断结束后将符合条件的元素再插入到新数组,这种想法其实是正确的,但是很可惜,本题不能用这样的方法,因为题目要求不能使用额外的数组空间,这就意味着我们是不能创建新数组的,所以本题就需要采取其他做法;

那么对于这道题,还有什么其他做法呢?这里就要为大家介绍一个重要的方法——双指针法

双指针也称为快慢指针,顾名思义,我们需要创建两个指针变量,在本题中,我们可以创建src,dst两个变量,我们可以让src先走,然后判断它指向的值与val是否相等,如果相等,src++;如果不相等,那么要先进行赋值,将src指向的值赋给dst指向的值,然后再让两个变量同时向后移动一位,当src超过数组的范围时,这个时候停止判断,这时你会发现dst的值就是删除后的数组的长度,所以说到这里,代码基本也就出来了,大家来看下面的代码。

​
int removeElement(int* nums, int numsSize, int val)
{int src = 0;int dst = 0;while (src < numsSize){if (nums[src] == val){src++;}else{nums[dst] = nums[src];src++;dst++;}}return dst;
}​

大家来看这段代码,这里的逻辑就是我上面所说的,代码整体并不难,重点要理解这种思想。

题目3 最高分数

分析:本题要求我们来求三个数中的最大值,那么我们可以运用三目操作符来解决本题。大家来看下面的代码:

#include<stdio.h>
int main()
{int a = 0;int b = 0;int c = 0;while (~scanf("%d%d%d", &a,&b,&c)){int max = a > b ? a : b;max = max > c ? max : c;printf("%d", max);}return 0;
}

大家可以看到,本题运用三目操作符很容易解决,我们只需进行两两比较就可以得到最大值。这里大家要注意使用while来实现多组输入。

那么问题来了,本题还有没有其他做法?如果题目要求的不止3个数字呢?面对这个问题,我们就无法使用三目操作符进行解决了,这个时候我们就需要使用排序的知识,在我们学过的排序中,追简单的就是冒泡排序,所以本题的另一种解法如下:

int test(int arr[],int a)
{int i = 0;for (i = 0; i < a-1; i++){int j = 0;int flag = 1;for (j = 0; j < a - i - 1; j++){if (arr[j] < arr[j + 1]){flag = 0;int tmp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = tmp;}}if (flag == 1)break;}return arr[0];
}
#include<stdio.h>
int main()
{int arr[3] = { 0 };int i = 0;for (i = 0; i < 3; i++){scanf("%d", &arr[i]);}int ret = test(arr, 3);printf("%d", ret);return 0;
}

 大家来看,这里我分装了一个函数,里面实现的就是冒泡排序的逻辑,在主函数中,我们创建了数组去存储我们输入的成绩,然后将数据交给函数进行排序,最终我们需要返回的就是最大值;关于冒泡排序,大家可以关注我前面发表的关于指针的文章,里面详细介绍了冒泡排序。

题目4 判断元音还是辅音

 

分析:本题要求我们来判断输入的字母是元音还是辅音,那么我们需要利用数组先将所给的元音字母存储起来,然后我们在遍历数组进行判断;

​
#include<stdio.h>
int main()
{int ch = 0;char arr[] = "AaEeIiOoUu";while ((ch = getchar()) != EOF)//这里注意多组输入,运用getchar来输入字母{int i = 0;for (i = 0; i < 10; i++)//遍历数组{if (arr[i] == ch){printf("Vowel\n");break;//判断是元音,直接跳出循环}}if (i == 10)//i=10说明遍历完所有元音字母都没有匹配的,说明输入的是辅音字母{printf("Consonant\n");}getchar();//去除每个字符后的\n}return 0;
}​

这里大家注意看上面的代码注释,即可理解本题的解法。

这里还想给大家拓展一下,上面我们用getchar来处理了\n,那么下面还有另一种方法来处理,大家来看:

区别就在于循环条件那里,我们在%c前面加上空格,会消除掉前面所有的空白字符,并读取下一个字符,所以这里我们可以用这种方式来代替getchar。 

#include<stdio.h>
int main()
{char ch = 0;char arr[] = "AaEeIiOoUu";while (scanf(" %c",&ch) != EOF)//这里注意多组输入,运用getchar来输入字母{int i = 0;for (i = 0; i < 10; i++)//遍历数组{if (arr[i] == ch){printf("Vowel\n");break;//判断是元音,直接跳出循环}}if (i == 10)//i=10说明遍历完所有元音字母都没有匹配的,说明输入的是辅音字母{printf("Consonant\n");}}return 0;
}

题目5  包含9的数字

分析:本题要求我们找出1~2019中含有9的数字,那么我们要先产生1~2029之间的数字,然后进行判断;

#include<stdio.h>
int main()
{int i = 0;int count = 0;for (i = 1; i <= 2019; i++){int m = i;while (m > 0){if (m % 10 == 9){count++;break;}else{m /= 10;}}}printf("%d", count);return 0;
}

 这里大家可以看到,我们使用for循环产生了1~2019之间的数字,下面我们只需要判断最后一位是否为9即可,如果最后一位是9,那么计数器+1;反之,我们将最后一位去除掉,将其后一位作为最后一位,再次进行判断。

题目6 有序序列合并

 分析:本题我们需要将两个数组进行合并,我们的方法是每次让i下标和j下标对应值进行比较,谁小就打印谁,同时i下标往后走。

#include <stdio.h>int main()
{int n = 0;int m = 0;int arr1[1000] = {0};int arr2[1000] = {0};//输入scanf("%d %d", &n, &m);int i = 0;for(i=0; i<n; i++){scanf("%d", &arr1[i]);}for(i=0; i<m; i++){scanf("%d", &arr2[i]);}//处理int j = 0;i = 0;while(i<n && j<m){if(arr1[i] < arr2[j]){printf("%d ", arr1[i]);i++;}else{printf("%d ", arr2[j]);    j++;}}if(i == n){for(; j<m; j++){printf("%d ", arr2[j]);}}else{for(; i<n; i++){printf("%d ", arr1[i]);}}return 0;
}

题目7 单身狗1

分析:本题要求我们找出不成对出现的数字,那么这里有一个奇妙的解法,就是运用操作符去进行实现;我们知道一个数与0进行异或运算得到的是自己,而自己与自己进行异或运算得到的是0;所以本题我们只需要将数组中的所有数组挨个进行异或就可以找出那个“单身狗”。

#include<stdio.h>
int main()
{int i = 0;int sum = 0;int arr[] = { 1,2,3,4,5,1,2,3,4 };int sz = sizeof(arr) / sizeof(arr[0]);for (i = 0; i < sz; i++){sum ^= arr[i];}printf("%d", sum);return 0;
}

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

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

相关文章

软件开发者消除edge浏览器下载时“此应用不安全”的拦截方法

当Microsoft Edge浏览器显示“此应用不安全”或者“已阻止此不安全的下载”这类警告时&#xff0c;通常是因为Windows Defender SmartScreen或者其他安全功能认为下载的文件可能存在安全风险。对于软件开发者来说&#xff0c;大概率是由于软件没有进行数字签名&#xff0c;导致…

【React】useState:状态更新规则详解

文章目录 一、基本用法二、直接修改状态 vs 使用 setState 更新状态三、对象状态的更新四、深层次对象的更新五、函数式更新六、优化性能的建议 在 React 中&#xff0c;useState 是一个非常重要的 Hook&#xff0c;用于在函数组件中添加状态管理功能。正确理解和使用 useState…

未来的智能交通系统:智能合约在交通管理中的应用前景

随着城市化进程的加快和交通问题日益突出&#xff0c;智能交通系统成为了解决城市交通拥堵和安全问题的重要手段。本文将探讨智能合约在未来智能交通系统中的应用前景&#xff0c;分析其在交通管理中的潜力和优势。 什么是智能交通系统&#xff1f; 智能交通系统利用先进的信息…

MySQL之索引及简单运用

索引&#xff1a; 什么是索引 索引是数据库中一种非常重要的数据结构&#xff0c;用于帮助快速查询数据库表中的数据。它就像一本书的目录&#xff0c;能够让你快速定位到书中的某个具体章节或内容&#xff0c;而不需要一页一页地翻阅整本书。 在数据库管理系统中&#xff0c;…

Linux下如何设置系统定时任务

在Linux系统中&#xff0c;用户可以使用cron工具来设置定时任务。cron是一个守护进程&#xff0c;用于在指定的时间间隔执行指定的命令或脚本。下面是在Linux系统中设置系统定时任务的步骤。 使用crontab命令编辑定时任务列表&#xff1a; crontab -e该命令会打开一个文本编辑…

设计模式 之 —— 单例模式

目录 什么是单例模式&#xff1f; 定义 单例模式的主要特点 单例模式的几种设计模式 1.懒汉式&#xff1a;线程不安全 2.懒汉式&#xff1a;线程安全 3.饿汉式 4.双重校验锁 单例模式的优缺点 优点&#xff1a; 缺点&#xff1a; 适用场景&#xff1a; 什么是单例模…

Highcharts 饼图:数据可视化的魅力

Highcharts 饼图:数据可视化的魅力 引言 在数据可视化的世界中,饼图作为一种经典且直观的图表类型,被广泛应用于各种领域。Highcharts,作为一个功能强大且易于使用的JavaScript图表库,为我们提供了创建精美饼图的便捷途径。本文将深入探讨Highcharts饼图的特点、应用场景…

VBA实例-从Excel整理数据到Word

实现目录 功能需求数据结构复制数据到新sheet并分类数据添加序号、日期、时间三列数据添加序号列添加时间列 将名称和类别复制到word文件中将参数5和参数9中的一个复制到word文件中 实例 功能需求 1、将原始数据中不要的数据剔除 2、原始数据中增加序号、日期和时间三列数据&a…

图片上传成功却无法显示:静态资源路径配置问题解析

1、故事的背景 最近&#xff0c;有个学弟做了一个简单的后台管理页面。于是他开始巴拉巴拉撘框架&#xff0c;写代码&#xff0c;一顿操作猛如虎&#xff0c;终于将一个简单的壳子搭建完毕。但是在实现功能&#xff1a;点击头像弹出上传图片进行头像替换的时候&#xff0c;卡壳…

三星Unpacked发布会即将举行:有新款折叠屏手机,还有智能戒指

随着7月的脚步渐近&#xff0c;科技界的目光再次聚焦于三星&#xff0c;它即将在法国巴黎举办今年的第二场Unpacked发布会。这不仅是一场新品的展示&#xff0c;更是三星对创新科技的一次深刻诠释。 从Galaxy Z Fold 6的全新设计&#xff0c;到Galaxy Z Flip 6的显著升级&…

CSS实现表格无限轮播

<div className{styles.tableTh}><div className{styles.thItem} style{{ width: 40% }}>报警名称</div><div className{styles.thItem} style{{ width: 35% }}>开始时间</div><div className{styles.thItem} style{{ width: 25% }}>状态&…

C++学习笔记-基类、派生类与虚函数关系

在C的面向对象编程中&#xff0c;基类&#xff08;Base Class&#xff09;、派生类&#xff08;Derived Class&#xff09;以及虚函数&#xff08;Virtual Functions&#xff09;构成了多态性的基石。这三者之间的关系错综复杂而又紧密相连&#xff0c;它们共同支撑起C中复杂而…

《后端程序猿 · @Value 注释说明》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; CSDN入驻不久&#xff0c;希望大家多多支持&#xff0c;后续会继续提升文章质量&#xff0c;绝不滥竽充数…

定制ESXi 8镜像教程

本文将详细说明从安装 PowerCLI 到定制 ESXi 8 镜像的整个过程。 安装 VMware PowerCLI 1. 打开 PowerShell 打开 PowerShell&#xff1a; 在 Windows 搜索栏中输入 PowerShell&#xff0c;然后右键点击“Windows PowerShell”&#xff0c;选择“以管理员身份运行”。你会看…

【Unity PC端打包exe封装一个并添加安装引导】

Unity PC端打包exe封装一个并添加安装引导 比特虫在线制作ico图标ico图标转换工具 选中打包出来的所有文件和ico图标 右键 使用RAR软件 添加到压缩文件 两个名称要相同 设置完点击确认等待压缩完成 然后就可以使用 Smart Install Maker制作引导安装程序了

过滤出List集合的元素是Person对象,过滤出每个元素非null的name字段得到String类型的集合

import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; public class Main { public static void main(String[] args) { List people Arrays.asList( new Person(“Alice”, 30), new Person(null, 25), new Person(“Charlie”, 35) ); //…

Thinkphp5实现前后端通过接口通讯基本操作方法

在ThinkPHP5框架中&#xff0c;实现前后端通过接口通讯是一个常见的需求&#xff0c;尤其是在开发RESTful API时。下面是一个基本的步骤指南&#xff0c;用于设置ThinkPHP5来创建API接口&#xff0c;并使前端能够通过HTTP请求与后端进行通讯。 1. 创建API模块 首先&#xff0…

解决Pycharm找不到conda可执行文件

解决&#xff1a; 在 ‘Conda 可执行文件’ 的输入框里面&#xff0c;找到并选中 anaconda\library\bin 路径下的“ conda.bat ” ,再点击‘ 加载环境 ’&#xff0c;即可出现 ‘ 使用现有环境 ’ 的输入框&#xff0c;如图所示。

【实现100个unity特效之8】使用ShaderGraph实现2d贴图中指定部分局部发光效果

最终效果 寒冰法师 火焰法师 文章目录 最终效果寒冰法师火焰法师 素材一、功能分析实现方法基本思路Unity的Bloom后处理为什么关键部位白色&#xff1f;最终结果 二、 新建URP项目三、合并图片四、使用PS制作黑白图片方法一 手动涂鸦方法二 魔棒工具1. 拖入图片进PS&#xff0…

Unity3d打包到Android

本文参考&#xff1a; Unity3D新手教程&#xff1a;如何打包发布到Android_哔哩哔哩_bilibili 一、Unity 打包Android的环境搭建 1、工具安装 Unity Hub已经集成了Android的环境搭建。 选择Add modules 然后安装Android Build Support下的所有工具。 如果各个工具都安装成功…