0
点赞
收藏
分享

微信扫一扫

【MySQL数据库 | 第十二篇】:约束

文章目录



一、题目


🎃题目描述


🎃输入输出


🎃样例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

举报

相关推荐

0 条评论