第一题:寻找锦鲤
- 公司年会有一个寻找锦鲤的游戏,每一个员工随意写一个字,如果在“锦鲤”词库中有这个字,那么就奖励500元锦鲤红包,否则就没有,每人只能玩一次。现有锦鲤字库如下,它们按照Unicode编码值从小到大排序:char[] koiFishWords = {'一','今','地','定','年','开','我','果','火','爱','结','花','遍'};
解题思路:Scanner方法让用户从键盘输入一个要猜的数,因为数组char[] koiFishWord是按照Unicode编码值从小到大排序的,则可以通过二分查找判断要猜的数是否在锦鲤词库char[] koiFishWord中即可。
public static void main(String[] args) {
char[] koiFishWords = {'一','今','地','定','年','开','我','果','火','爱','结','花','遍'};
Scanner sc = new Scanner(System.in);
System.out.println("请输入要猜的字:");
char word = sc.next().charAt(0);
if(isKoi(koiFishWords,word)){
System.out.println("恭喜你猜对了,你是锦鲤,获得500元锦鲤红包!!!");
}else {
System.out.println("很遗憾,你猜错了!!!");
}
}
public static boolean isKoi(char []num,char word) {
for (int left=0,right = num.length-1;left<right;) {
int middle = (right+left)/2;
if(num[middle] == word){
return true;
}else if(word > num[middle]){
left = middle+1;
}else{
right= middle-1;
}
}
return false;
}
第二题:绳子覆盖点
- 直线上有n个点,数组a[0],a[1],...,a[n-1]存了每个点相对与后一个点的距离(最后一个点存储值为0),有一个长度为L的绳子放在直线上最多能覆盖多少个点?
解题思路:我们先定义一个长度为10的数组int []nums来记录绳子的每个点相对与后一个点的距离,通过Random方法来随机给数组赋值(注意,数组最后一个元素值为0),通过Scanner方法让用户从键盘输入一个绳子的长度,然后遍历数组,定义变量sum来记录数组元素累加值,比较绳子长度和sum,如果遍历到某一个点时,绳子的长度小于sum,则说明绳子不足与覆盖点后面的点,绳子最多能覆盖的点为当前元素下标加1。
public static void main(String[] args) {
int []nums = new int[10];
Random rand = new Random();
for (int i = 0; i < nums.length-1; i++) {
nums[i] = rand.nextInt(10)+1;
}
System.out.println(Arrays.toString(nums));
Scanner sc = new Scanner(System.in);
System.out.println("请输入绳子的长度:");
int l = sc.nextInt();
int sum = 0;
for (int i = 0; i < nums.length; i++) {
sum += nums[i];
if (sum > l) {
System.out.println("最多能覆盖"+(i+1)+"个点");
break;
}
}
}
第三题:学生成绩统计
-
需求:保存全班的每个组的成绩,并对成绩做统计,使用二维数组保存全班的每个组的成绩,从键盘输入一共有几组,从键盘输入每一组分别有多少人,从键盘输入每一个同学的成绩,并对成绩做如下统计:1:统计每一组的最高分、最低分。2:统计每一组的平均分。3:统计全班的最高分、最低分。4:统计全班的平均分。5:统计全班的总人数
解题思路:这个题关键在于二维数组,全局变量,和局部变量的使用。通过Scanner方法让用户从键盘输入共有几组人,再通过用户输入的数据n定义二维数组的第一维,然后遍历数字让用户输入每组的人数,通过用户输入的数据初始化数组第二维。此时数组已经初始化完成 ,再通过遍历数组让用户输入每组学生的成绩,即可拿到全部数据。分别定义以下全局变量:int classNum(记录全班人数),double classAvg(记录全班总分,最后除全班总人数即可得到平均分),int classMax(记录全班最高分),int classMin(记录全班最低分)。定义局部变量:int max(记录小组最高分),int min(记录小组最低分),double avg(记录小组总分,最后除小组总人数即可得到平均分)。遍历二维数组,对每个变量做对应的判断和操作即可。
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入共有几组");
int n = sc.nextInt();
int [][] students = new int[n][];
for (int i = 0; i < n; i++) {
System.out.println("请输入第"+(i+1)+"组有多少人");
int num = sc.nextInt();
students[i] = new int[num];
}
for (int i = 0; i < students.length; i++) {
for (int j = 0; j < students[i].length; j++) {
System.out.println("请输入第"+(i+1)+"组第"+(j+1)+"个人的成绩");
students[i][j] = sc.nextInt();
}
}
for (int i = 0; i < students.length; i++) {
for (int j = 0; j < students[i].length; j++) {
System.out.print(students[i][j]+" ");
}
System.out.println();
}
int classNum = 0;
double classAvg = 0;
int classMax = 0;
int classMin = students[0][0];
for (int j = 0; j < students.length; j++) {
int max = students[j][0];
int min = students[j][0];
double avg = 0;
for (int i = 0; i < students[j].length; i++) {
if (max < students[j][i]) {
max = students[j][i];
}if (min > students[j][i]) {
min = students[j][i];
}if (classMax < students[j][i]) {
classMax = students[j][i];
}if (classMin > students[j][i]) {
classMin = students[j][i];
}
avg += students[j][i];
classAvg += students[j][i];
classNum++;
}
System.out.println("第"+(j+1)+"组最高分为:"+max+",最低分为:"+min+",平均分为:"+(avg/students[j].length));
}
System.out.println("全班总人数为:"+classNum+"组最高分为:"+classMax+",最低分为:"+classMin+",平均分为:"+classAvg/classNum);
}
标签:练习题,int,System,students,算法,数组,println,out
From: https://blog.csdn.net/2301_77830460/article/details/143675842