C语言刷题小记2

news2025/1/17 1:19:34

前言

本篇博客还是为大家分享一些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.coloradmin.cn/o/1945857.html

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

相关文章

Adaboost集成学习 | Matlab实现基于LSTM-Adaboost长短期记忆神经网络结合Adaboost集成学习多输入单输出时间序列预测

目录 效果一览基本介绍模型设计程序设计参考资料效果一览 基本介绍 Adaboost集成学习 | Matlab实现基于LSTM-Adaboost长短期记忆神经网络结合Adaboost集成学习时间序列预测(股票价格预测) 模型设计 步骤1: 数据准备 收集和整理历史数据。确保数据集经过适当的预处理,如归一…

【数据结构初阶】一篇文章带你超深度理解【单链表】

hi &#xff01; 目录 前言&#xff1a; 1、链表的概念和结构 2、单链表&#xff08;Single List&#xff0c;简写SList&#xff09;的实现 2.1 定义链表&#xff08;结点&#xff09;的结构 2.2 创建一个链表 2.3 打印链表 2.4 尾插 2.5 头插 2.6 尾删 2.7 头…

Aigtek高压放大器指标参数要求及其应用

高压放大器是一类特殊的放大器&#xff0c;其主要功能是将输入的低电压信号放大为输出的高电压信号。在各种应用中&#xff0c;如音频放大、通信系统、医学设备等&#xff0c;高压放大器都扮演着至关重要的角色。为了确保高压放大器能够满足实际应用的需求&#xff0c;并且具有…

Redis持久化和集群模式

目录 1、什么是持久化&#xff1f; 2、Redis实现持久化的方式 3、RDB&#xff08;Redis DataBase&#xff09;快照模式 3.1 手动触发 3.1.1 save 3.1.2 bgsave 3.2 自动触发 4、AOF&#xff08;append only File&#xff09;日志追加模式 4.1 开启aof 4.2 RBD和AOF的区…

mysql JSON特性优化

有朋友问到&#xff0c;mysql如果要根据json中的某个属性过滤&#xff0c;数据量大的话&#xff0c;性能很差&#xff0c;要如何提高性能&#xff1f; 为什么要用json串&#xff1f; 由于一些特定场景&#xff0c;mysql需要用到json串&#xff0c;例如文档&#xff0c;不同的…

【Matlab 传感器布局优化】基于群智能算法的wsn覆盖优化研究

一 背景介绍 无线传感器网络&#xff08;Wireless Sensor Network, WSN&#xff09;作为远程环境监测系统应用的关键技术&#xff0c;能够在有限的能源供应下提供高效的传感和通信服务。覆盖控制是保证高效通信和可靠数据传输的重要手段。鉴于复杂的物理环境限制了节点部署方式…

《JavaEE篇》--多线程(2)

《JavaEE篇》--多线程(1) 线程安全 线程不安全 我们先来观察一个线程不安全的案例&#xff1a; public class Demo {private static int count 0;public static void main(String[] args) throws InterruptedException {Thread t1 new Thread(() -> {//让count自增5W次…

zabbix“专家坐诊”第247期问答

问题一 Q&#xff1a;乐维MCM免费版还需要再单独安装一个Zabbix连接么&#xff1f; A&#xff1a;估计是perseusZ_server服务进程因为重复安装导致服务挂了。试下能不能启动起来&#xff1f;service perseusZ_server status Q&#xff1a;正常启动的&#xff0c;页面刷新了还…

谷粒商城实战笔记-50-51-商品分类的删除

文章目录 一&#xff0c;50-商品服务-API-三级分类-删除-逻辑删除1&#xff0c;逻辑删除的配置1.1 配置全局的逻辑删除规则&#xff08;可省略&#xff09;1.2 配置逻辑删除Bean&#xff08;可省略&#xff09;1.3 Bean相应字段上加上注解TableLogic 2&#xff0c;后台接口开发…

力扣高频SQL 50题(基础版)第十题

文章目录 力扣高频SQL 50题&#xff08;基础版&#xff09;第十题1661. 每台机器的进程平均运行时间题目说明思路分析实现过程准备数据实现方式结果截图总结 力扣高频SQL 50题&#xff08;基础版&#xff09;第十题 1661. 每台机器的进程平均运行时间 题目说明 表: Activity…

数里行间创始人郭振:AIGC如何打造跨境电商增长新引擎

导读&#xff1a;在跨境电商领域&#xff0c;AI客服已经能够实现50%的问题平均解决率和不低于人工标准的客户满意度。 在生成式AI的商业化应用领域&#xff0c;跨境电商行业一直走在前列&#xff0c;成为最早实现技术落地的先锋之一。 “我们的AI客服机器人&#xff0c;已经帮助…

01 MySQL

文章目录 MySQL1、数据库相关概念2、MySQL3、SQL概述4、DDL:数据库操作5、DDL:表操作6、DML7、DQL8、约束9、数据库设计10、多表查询11、事务 MySQL 1、数据库相关概念 数据库 &#xff08;1&#xff09;存储和管理数据的仓库&#xff0c;数据是有组织的进行存储。 &#xff0…

【接口测试】params传参与body传参区别

文章目录 一.params传参二.body传参三.两者区别说明 一.params传参 params传参一般用于get请求 params传参时,参数会附于URL后面以问号形式展示。 示例&#xff1a; http://ip地址:端口号/login?usernamexm&pwd111二.body传参 body传参一般用于post请求 body传参时需…

2022真题-架构师案例(二)

1、某大型电商平台建立了一个在线B2B商店系统&#xff0c;并在全匡多地建设了货物仓储中心&#xff0c;通过提前备货的方式来提高货物的运送效率。但是在运营过程中&#xff0c;发现会出现很多跨仓储中心调货从而延误货物运送的情况。为此&#xff0c;该企业计划新建立一个全国…

搜维尔科技:Cyber​​glove通过其前所未有的柔性传感器技术,带来了多年的经验、专业知识和可靠性

Cyberglove 概述 新一代数据手套技术 MoCap 手套采用了原始 CyberGlove 产品 20 年经验所建立的技术&#xff0c;产生了改进的和新的特性、能力和设计&#xff0c;非常适合动作捕捉环境。 旧与新相遇&#xff0c; Cyberglove 通过其前所未有的柔性传感器技术&#xff0c;带来…

【深度学习】PyTorch框架(5):Transformer和多注意力机制

1、引言 在本文中&#xff0c;我们将探讨近两年来最具影响力的模型架构之一——Transformer模型。自从2017年Vaswani等人发表的论文《注意力是你所需要的全部》以来&#xff0c;Transformer架构在多个领域持续刷新着性能记录&#xff0c;尤其是在自然语言处理&#xff08;NLP&…

【网络安全的神秘世界】 文件上传及验证绕过

&#x1f31d;博客主页&#xff1a;泥菩萨 &#x1f496;专栏&#xff1a;Linux探索之旅 | 网络安全的神秘世界 | 专接本 | 每天学会一个渗透测试工具 这个漏洞对于初学者好挖&#xff0c;先找到文件上传的位置 文件上传是web网页中常见的功能之一&#xff0c;通常情况下恶意文…

Windows 11 系统对磁盘进行分区保姆级教程

Windows 11磁盘分区 磁盘分区是将硬盘驱动器划分为多个逻辑部分的过程&#xff0c;每个逻辑部分都可以独立使用和管理。在Windows 11操作系统中进行磁盘分区主要有以下几个作用和意义&#xff1a; 组织和管理数据&#xff1a;分区可以帮助用户更好地组织他们的数据&#xff0c…

怎么使用动态IP地址上网

如何设置动态IP地址上网&#xff1f; 设置动态IP地址上网的步骤如下&#xff1a; 一、了解动态IP地址 动态IP地址是由网络服务提供商&#xff08;ISP&#xff09;动态分配给用户的IP地址&#xff0c;它会根据用户的需求和网络情况实时改变。相比于静态IP地址&#xff0c;动态…

闲鱼、抖音、快手纷纷入局,“谷子”经济千亿市场纷争再起

二次元的狂热&#xff0c;终于还是蔓延到了三次元。 此前&#xff0c;在咸鱼上的一场拍卖中&#xff0c;一块直径75mm&#xff0c;重达20克的“吧唧”&#xff08;徽章&#xff09;&#xff0c;以7.2万人民币的价格被成功拍下。而与此同时&#xff0c;上海黄金交易所中的金价是…