第一行输入一个正整数k(1≤k≤105)含义如题面所示。第二行输入一个长度不超过105,且由小写字母和数字混合构成的字符串8。 |输出描述 在一行上输出第k个数,不包含前导0;如果不存在第k个数,直接输出N。 用c语言
时间: 2024-10-13 15:17:16 浏览: 32
在C语言中,可以按照题目描述的方式来设计程序,首先我们需要读取输入的两个部分:一个整数k和一个字符串8。然后遍历字符串,计算每个符合条件的数字序列的索引,并记录总数。当找到第k个数字序列时,输出该数字,如果没有则输出"N"。
这是一个基本的解决方案,使用指针和计数器:
```c
#include <stdio.h>
#include <stdbool.h>
bool is_valid(int num, const char str[]) {
for (int i = 0; i < strlen(str); ++i) {
if (num == str[i] - '0') {
return true;
}
num *= 10;
}
return false;
}
int main() {
int k;
scanf("%d", &k);
char str[100005];
scanf("%s", str);
int count = 0;
for (int i = 0; i < strlen(str); ++i) {
if (isdigit(str[i])) {
int num = str[i] - '0';
if (is_valid(num, str + i)) {
count++;
if (count == k) {
printf("%d", num);
break;
}
}
}
}
if (count < k) {
printf("N");
}
return 0;
}
```
此代码首先读取k值,然后读取字符串,接着逐位检查字符串中的数字字符,如果是有效数字(即它能组成一个完整的数字),就更新计数器。一旦达到k次,就输出对应的数字;如果到字符串结束还没达到k,就输出"N"。
阅读全文