【华为OD机试真题 C语言】7、字符串筛选排序 | 机试真题+思路参考+代码解析

news/2024/11/15 5:48:21/

文章目录

    • 一、题目
      • 🎃题目描述
      • 🎃输入输出
      • 🎃样例1
      • 🎃样例2
    • 二、思路参考
    • 三、代码参考
      • 🏆C语言
  • 作者:KJ.JK


🍂个人博客首页: KJ.JK
 
🍂专栏介绍: 华为OD机试真题汇总,定期更新华为OD各个时间阶段的机试真题,每日定时更新,本专栏将使用C语言进行更新解答,包含真题,思路分析,代码参考,欢迎大家订阅学习


一、题目


🎃题目描述

输入一个由N个大小写字母组成的字符串
按照ASCII码值从小到大进行排序
查找字符串中第K个最小ASCII码值的字母(k>=1)
输出该字母所在字符串中的位置索引(字符串的第一个位置索引为0)
k如果大于字符串长度则输出最大ASCII码值的字母所在字符串的位置索引
如果有重复字母则输出字母的最小位置索引


🎃输入输出

输入
第一行输入一个由大小写字母组成的字符串
第二行输入k k必须大于0 k可以大于输入字符串的长度
 
输出
输出字符串中第k个最小ASCII码值的字母所在字符串的位置索引
,k如果大于字符串长度则输出最大ASCII码值的字母所在字符串的位置索引,
如果第k个最小ASCII码值的字母存在重复 则输出该字母的最小位置索引


🎃样例1

输入
AbCdeFG
3输出
5说明:
根据ASCII码值排序,第三个ASCII码值的字母为F
F在字符串中位置索引为5(0为字符串的第一个字母位置索引)

🎃样例2

输入
fAdDAkBbBq
4输出
6说明:
根据ASCII码值排序前4个字母为AABB由于B重复则只取B的第一个最小位置索引6,
而不是第二个B的位置索引8

二、思路参考

  1. 首先,包含了所需的头文件 <stdio.h>, <stdlib.h>, <string.h>
  2. 定义了一个用于比较的函数 compare,用于按照ASCII码值从小到大排序字符串
  3. 声明了变量 str 用于存储输入的字符串,以及变量 k 用于存储要查找的第k个最小ASCII码值的字母
  4. 通过 scanf 函数读取输入的字符串和k的值
  5. 使用 strlen 函数获取字符串的长度,并将其存储在变量 len 中
  6. 声明了一个新的字符串 sorted_str,并使用 strcpy 函数将输入字符串 str 复制到 sorted_str 中
  7. 使用 qsort 函数对 sorted_str 字符串进行排序,以便按照ASCII码值从小到大排序,如果k大于字符串长度,即 k > len,输出字符串的最后一个位置索引(len - 1)
  8. 否则,找到排序后的第k个字母 kth_smallest,并遍历原始字符串,找到该字母在原字符串中的位置索引 position
  9. 最后,输出位置索引 position。

三、代码参考


🏆C语言

#include <stdio.h>
#include <stdlib.h>
#include <string.h>int compare(const void *a, const void *b) {return *(const char *)a - *(const char *)b;
}int main() {char str[100];int k;scanf("%s", str);scanf("%d", &k);int len = strlen(str);char sorted_str[100];strcpy(sorted_str, str);qsort(sorted_str, len, sizeof(char), compare);if (k > len) {printf("%d\n", len - 1);} else {char kth_smallest = sorted_str[k - 1];int position = -1;for (int i = 0; i < len; i++) {if (str[i] == kth_smallest) {position = i;break;}}printf("%d\n", position);}return 0;
}

作者:KJ.JK


http://www.ppmy.cn/news/307168.html

相关文章

关于 惠普 ENVY x360 15 bp10? 升级内存、硬盘 拆机 注意事项

该文章电脑型号是 惠普 ENVY x360 15 bp10&#xff1f; 因为有好几个型号但都是 bp10开头的 电脑是上面这台哦&#xff0c;要分清楚哦~~~~ 该电脑具有一个可拆卸的 内存插槽 速度需要 DDR4 2400 的内存 &#xff08;另外一条内存是焊死在主板上面的&#xff01;&#xff01…

前端060_权限系统_按钮控制

需求与注册全局指令步骤 需求&#xff1a;通过自定义全局指令 v-permission 来控制按钮的显示或隐藏。 全局指令的注册方法 在 src 文件夹下新建 directive/index.js 文件&#xff0c;引入所有要注册的全局指令。 在 directive 文件夹下新建 permission/index.js 文件&#xf…

MyCat Docker 搭建与测试

mycat 是mysql分库分表的中间件&#xff0c;由java编写&#xff0c;本次进行mysql、mycat 的docker搭建&#xff0c;理解mycat的原理与特性。 一、mysql docker 搭建 这里启动两个实例&#xff1a; docker run -itd --name mysql1 -p 3307:3306 -e MYSQL_ROOT_PASSWORD123 m…

Mac下载工具哪个好?迅雷 for Mac是个不错的选择!

Mac下载软件哪款好用&#xff1f;迅雷 for Mac 专为Mac系统优化的内核&#xff0c;迅雷v3.3.2(3944)官方版全新升级&#xff0c;精美的皮肤界面&#xff0c;全新引擎下载速度更快、内容更丰富。除此以外&#xff0c;迅雷云播放&#xff0c;专为内存不够的Mac用户设计&#xff0…

Linux 迅雷 chrome插件,Chrome(Chromium)迅雷下载支持扩展1.1测试版【更新】

那个是迅雷专链。因为安全性限制,所以出现那个拒绝的提示。 遇到专链:只需要新标签打开链接就能调用迅雷下载的。 目前三款插件:迅雷自己出的,google出的那个下载助手,还有Oget for chrome。 最好用的是Oget for chrome,支持的下载工具最多,与内置的下载器切换方便,而且…

Ubuntu下载工具uGet+aira2

前言 先废话一下&#xff0c;没装下载工具之前&#xff0c;每次下载都是在Chrome上点击下载链接&#xff0c;然后静静地看它下载&#xff0c;下载个小点的文件或者链接资源较好的文件就算了&#xff0c;但是遇到文件很大或者链接资源不是很好&#xff0c;比如下载个几十G文件&…

Ubuntu下非常给力的下载工具

Windows下的下载工具--迅雷&#xff0c;之所以下载速度快&#xff0c;乃是它能搜索资源、为己所用&#xff0c;而不是仅仅从原始地址这单一资源处下载。 Ubuntu下也有类似的工具&#xff0c;那就是aira2。 aira2是一个命令行下载工具&#xff0c;可以配合其他图形界面的下载软…

linux好用的下载工具,四款linux下的好工具

原标题:四款linux下的好工具 linux下的好工具很多,使用得当会极大的提高工作者的效率。下面小编为大家推荐四个比较好用并且实用的工具,对这四款工具在centos和ubuntu两个系统下进行相应的安装介绍,并做了简单测试和使用说明。 1.下载工具aria2 aria2是一个支持多线程下载的…