【华为OD机试真题 C++】1006 - 字符串筛选排序 | 机试题+算法思路+考点+代码解析

文章目录

    • 一、题目
      • 题目描述
      • 输入输出
      • 样例1
      • 样例2
    • 二、代码参考
  • 作者:KJ.JK



 
个人博客首页: KJ.JK
 
系列专栏:华为OD机试真题(C++)

专栏介绍: 华为OD机试真题汇总,使用C++来进行解析解答实现,帮助大家更好的AC题目,分享各种解题思路,让大家更好通过机试,持续更新中,欢迎大家订阅


一、题目


题目描述

输入一个由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


二、代码参考

#include 
 
using namespace std;
 
int main() 
{
    string str;
    int k;
    while (cin >> str >> k) {
        vector<char> charlist;
        for (char c: str) charlist.push_back(c);
        sort(charlist.begin(), charlist.end());
        cout << str.find(k >= str.size() ? charlist.back() : charlist.at(k - 1)) << endl;
    }
}

作者:KJ.JK

文章对你有所帮助的话,欢迎给个赞或者 star,你的支持是对作者最大的鼓励,不足之处可以在评论区多多指正,交流学习

你可能感兴趣的:(华为OD机试真题(C++),c++,华为,开发语言,字符串筛选排序,华为od机试真题)