文章目录
- 一、题目
- 🎃题目描述
- 🎃输入输出
- 🎃样例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
二、思路参考
- 首先,包含了所需的头文件 <stdio.h>, <stdlib.h>, <string.h>
- 定义了一个用于比较的函数 compare,用于按照ASCII码值从小到大排序字符串
- 声明了变量 str 用于存储输入的字符串,以及变量 k 用于存储要查找的第k个最小ASCII码值的字母
- 通过 scanf 函数读取输入的字符串和k的值
- 使用 strlen 函数获取字符串的长度,并将其存储在变量 len 中
- 声明了一个新的字符串 sorted_str,并使用 strcpy 函数将输入字符串 str 复制到 sorted_str 中
- 使用 qsort 函数对 sorted_str 字符串进行排序,以便按照ASCII码值从小到大排序,如果k大于字符串长度,即 k > len,输出字符串的最后一个位置索引(len - 1)
- 否则,找到排序后的第k个字母 kth_smallest,并遍历原始字符串,找到该字母在原字符串中的位置索引 position
- 最后,输出位置索引 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;
}