蓝桥杯校内预选赛题
欢迎大佬批评指正!!!
问题描述
给定一个序列,每次询问序列中第l个数到第r个数中第K大的数是哪个。
输入格式
第一行包含一个数n,表示序列长度。
第二行包含n个正整数,表示给定的序列。
第三个包含一个正整数m,表示询问个数。
接下来m行,每行三个数l,r,K,表示询问序列从左往右第l个数到第r个数中,从大往小第K大的数是哪个。序列元素从1开始标号。
输出格式
总共输出m行,每行一个数,表示询问的答案。
样例输入
5
1 2 3 4 5
2
1 5 2
2 3 2
样例输出
4
2
数据规模与约定
对于30%的数据,n,m<=100;
对于100%的数据,n,m<=1000;
保证k<=(r-l+1),序列中的数<=106。问题描述
给定一个序列,每次询问序列中第l个数到第r个数中第K大的数是哪个。
分析:
1.我们先按题目完成输入语句
写输入语句时需要注意,在用完 .nextInt()之后我们需要重新创建一个新的Scanner对象,再来写.nextLine(),但是反过来就不需要重新写对象了。这是因为在 .nextInt()会默认读入一个空格,直接用.nextLine(),就会被认为用户输入的就是空格。
2.输入的时候我们是把读入的l.k.r放在字符串中的,我们需要把该字符串转化为整形数组,方便我们之后使用下标来获取l,k,r的值。
3.随后我们根据l和k值截取源字符串
把截取的数据放到整形数组里方便排序和对元素进行下标操作
然后对截取后的元素进行升序排序
我们将截取后的每行元素放到一个一维数组里,最后直接根据下标和截取的规则(substring是截头不截尾)获取要求的r
代码:
import java.util.Arrays;
import java.util.Scanner;
public class Main4 {
public static void main(String[] args) {
//1.第一行包含一个数n,表示序列长度。
Scanner in0=new Scanner(System.in);
int n=in0.nextInt();
//2.第二行包含n个正整数,表示给定的序列。
Scanner in1=new Scanner(System.in);
String str1=in1.nextLine();
// 3.第三个包含一个正整数m,表示询问个数。
int m=in1.nextInt();
//4.接下来m行,每行三个数l,r,K,
Scanner in2=new Scanner(System.in);
int arr[][]=new int[m][3];
for(int i=0;i<m;i++){
String str2=in2.nextLine();
String[] st=str2.split("\\s");//
for(int j=0;j<3;j++){
//将输入的字符串放到整形的二维数组中;
arr[i][j]=Integer.parseInt(st[j]);
}
// System.out.println(Arrays.toString(arr[i]));
}
//5.截取字符串
for(int i=0;i<m;i++){
String str3=str1.substring(arr[i][0]-1,arr[i][1]);
int arr2[]=new int[str3.length()];
for(int j=0;j< str3.length();j++){
arr2[j]=Integer.parseInt(String.valueOf(str3.charAt(j)));
}
Arrays.sort(arr2);
System.out.println(arr2[arr2.length-arr[i][2]]);
}
}
}
运行结果:
再加一个牛客上刷到的类似的题
问题描述
找出n个数里最小的k个数
输入描述:
每个测试用例包括用空格分开的n+1个数,最后一个整数值为k
输出描述:
输出n个整数里最小的k个数
示例:
输入
3 9 6 8 -10 7 -11 19 30 12 23 5
输出
-11 -10 3 6 7
代码:
import java.util.Arrays;
import java.util.Scanner;
public class Main1 {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
String str=in.nextLine();
String st[]=str.split(" ");
int k=Integer.parseInt(st[st.length-1]);
int []arr=new int[st.length-1];
for(int i=0;i<st.length-1;i++){
arr[i]=Integer.parseInt(st[i]);
}
Arrays.sort(arr);
for(int i=0;i<k;i++){
System.out.print(arr[i]+" ");
}
}
}