题目搜集于各位前辈,侵删。
第一题
求平均分
输入:两行
第一行是分数个数n
第二行是这n个分数,以空格隔开
输出:去掉最高分与最低分后的平均成绩
import java.util.Arrays;
import java.util.Scanner;
public class c0901 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
while(sc.hasNext()) {
int n = sc.nextInt();
int[] arr = new int[n];
for(int i = 0;i<n;i++) {
arr[i] = sc.nextInt();
}
Arrays.sort(arr);
int sum = 0;
for(int i = 1;i<=n-2;i++) {
sum+=arr[i];
}
System.out.println(sum/(n-2));
}
sc.close();
}
}
第二题
密码
输入:一行
第一行:26个小写字母 以空格隔开 如 b a c e u f g h i j k l m n o p q r s t v w x y z d… v y z r s q
第二行:一个字符串(大写字母) 如: BUPTZ
输出:
(B用第一行的第二个字母替换,U用第21个替换,P用第(‘A’-‘P’+1)个替换,明白我意思吧…,Z用第26个字母q替换)
import java.util.Scanner;
public class c0902 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
while(sc.hasNext()) {
//cc是用来加密的工具
char[] cc = new char[26];
//s是加密前的明文
String s = "";
//ans就是加密后的密码
String ans = "";
for(int i = 0;i<26;i++) {
cc[i] = sc.next().charAt(0);
}
s = sc.next();
for(int i = 0;i<s.length();i++) {
int k = s.charAt(i)-'A';
ans+=String.valueOf(cc[k]);
}
System.out.println(ans);
}
sc.close();
}
}
第三题
排序
输入:四行
第一行:个数N1(2 3 4 5 6)
第二行:N1个数,升序排列(序列a)
第三行:个数N2(4 5 6 8 9)
第四行:N2个数,升序排列(序列b)
输出:N2行
2
3
4
5
5
第i行是,a中小于 b的第i个数 的数的个数
import java.util.Scanner;
public class c0903 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
while(sc.hasNext()) {
int n1 = sc.nextInt();
int[] arr = new int[n1];
for(int i = 0;i<n1;i++) {
arr[i] = sc.nextInt();
}
int n2 = sc.nextInt();
for(int i = 0;i<n2;i++) {
int a = sc.nextInt();
int flag = 0;
for(int j = 0;j<n1;j++) {
if(a<=arr[j]) {
flag = 1;
System.out.println(j);
break;
}
}
if(flag == 0) {
System.out.println(n1);
}
}
}
sc.close();
}
}
第四题
哈夫曼编码
输入:两行
第一行:个数N (5)
第二行:N个以空格隔开的数,表示这N个字符的出现次数(1 2 3 4 5)
输出:一行,哈夫曼编码的平均长度
import java.util.Arrays;
import java.util.Scanner;
//难道是公式题?
public class c0904 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
while(sc.hasNext()) {
int n = sc.nextInt();
int[] arr = new int[n];
int sum = 0;
for(int i = 0;i<n;i++) {
arr[i] = sc.nextInt();
sum+=arr[i];
}
Arrays.sort(arr);
//次数最少的两个肯定编码是最长的
//倒序,长度依次增加。最后一个和前一个是一样的长度
int len = 0;
double ans = 0;
for(int i = n-1;i>=0;i--) {
if(i>0) {
len++;
}
ans+=len*arr[i];
}
System.out.println(ans/sum);
}
sc.close();
}
}