独家华为OD机试 - 第K个最小码值的字母(C 语言解题)

Posted 梦想橡皮擦

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了独家华为OD机试 - 第K个最小码值的字母(C 语言解题)相关的知识,希望对你有一定的参考价值。

最近更新的博客

文章目录

使用说明

参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高。

华为 OD 清单查看地址:https://blog.csdn.net/hihell/category_12225286.html

华为OD详细说明:https://dream.blog.csdn.net/article/details/128980730

本期题目:第K个最小码值的字母

题目

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

输入

第一行输入一个由大小写字母组成的字符串
第二行输入kk必须大于0k可以大于输入字符串的长度

输出

输出字符串中第k个最小ASCII码值的字母所在字符串的位置索引
k如果大于字符串长度则输出最大ASCII码值的字母所在字符串的位置索引
如果第k个最小ASCII码值的字母存在重复,则输出该字母的最小位置索引

示例一

输入

AbCdeFG
3

输出

5

说明

根据ASCII码值排序,第三个ASCII码值的字母为F
F在字符串中位置索引为5(0为字符串的第一个字母位置索引)

示例一

输入

fAdDAkBbBq
4

输出

6

说明

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

Code

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void solveMethod(char* line, int k);

int main() 
    char line[1001];
    scanf("%[^\\n]%*c", line);
    int k;
    scanf("%d", &k);
    solveMethod(line, k);
    return 0;


void solveMethod(char* line, int k) 
    int len = strlen(line);
    char* list = (char*) malloc(len * sizeof(char));
    strcpy(list, line);

    for (int i = 0; i < len; i++) 
        for (int j = i+1; j < len; j++) 
            if (list[i] > list[j]) 
                char tmp = list[i];
                list[i] = list[j];
                list[j] = tmp;
            
        
    

    char c = (k >= len) ? list[len-1] : list[k-1];
    printf("%d", (int)(strchr(line, c) - line));
    free(list);


📢📢📢📢📢📢
💗 你正在阅读 【梦想橡皮擦】 的博客
👍 阅读完毕,可以点点小手赞一下
🌻 发现错误,直接评论区中指正吧

从订购之日起,案例5年内保证更新

以上是关于独家华为OD机试 - 第K个最小码值的字母(C 语言解题)的主要内容,如果未能解决你的问题,请参考以下文章

华为OD机试真题Python实现第 K 个最小码值的字母真题+解题思路+代码(2022&2023)

华为OD机试真题Java实现字符串筛选排序真题+解题思路+代码(2022&2023)

独家华为OD机试提供C语言题解 - 第 N 个排列

独家华为OD机试 - 整数对最小和(C 语言解题)

华为OD机试独家提供C语言题解 - 最小传递延迟

独家华为OD机试 - 寻找密码(C 语言解题)