一、J1_29_1
小明今天参加了“校园歌手大赛”,评委的打分规则是去掉一个最低分和一个最高分后算出剩下分数的平均分,你能帮助小明快速的算出平均分吗?
(评委数量必须大于 2) 输入说明:首先输入一个整数 n,代表评委人数,然后输入 n个数。请按照题目的计算 规则计算出平均分然后输出。 例如输入: 6 100 90 90 80 85 95 按照题目注意计算平均分并输出: 90.0
注意:使用循环和数组实现。
代码如下:
public class Week01 {
/**
* 传入字符串数组,返回数字数组 将字符串数组转换为数字数组
*
* @param str
* 字符串String类型数组
* @return int整形数组
*/
public static int[] ParseIntArray(String[] str) {
int[] intCount = new int[str.length];
for (int i = 0; i < str.length; i++) {
if (!str[i].matches("[0-9]{1,}")) {
System.out.println("输入的数中有非数字");
return null;
}
intCount[i] = Integer.valueOf(str[i]);
}
return intCount;
}
/**
* 冒泡排序法 传入一个无序的整形数组,返回按照升序排序的数组
*
* @param intArrays
* 整形数组
* @return 整形数组
*/
public static int[] SecNum(int[] intArrays) {
int[] intArr = intArrays;
// 循环对比数组中的值 ,升序排列
for (int i = 0; i < intArr.length; i++) {
// 当前第i个值,对比之前的值,如果比第j个值小,则交换位置,否则跳出循环.
for (int j = i; j > 0; j--) {
// 判断如果第j-1个数大于第j个数,则把第j-1个数和第j个数换位置,与小于i下标的所有数都进行判断
// 如果要降序排列,只需将大于符号改成小写即可
if (intArr[j - 1] > intArr[j]) {
int num = intArr[j - 1];// 获取第j-1个数
intArr[j - 1] = intArr[j];// 把第j个数赋值给第j-1个数
intArr[j] = num;// 把之前第j-1的数的值赋值给第j个数
} else {
break;
}
}
}
return intArr;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("输入评委人数:");
int pw = Integer.valueOf(sc.nextLine());
while (pw <= 2) {
System.out.println("评委人数不能小于2,请重新输入:");
pw = Integer.valueOf(sc.nextLine());
}
double[] douArr = new double[pw];
System.out.println("输入评分:");
String str = sc.nextLine();
int[] intArr = ParseIntArray(str.split("\\s+"));
intArr = SecNum(intArr);// 排序
// 去最高分和最低分
intArr[0] = 0;
intArr[intArr.length - 1] = 0;
// 求数组中的平均数
int avg = 0;
for (int i = 0; i < intArr.length; i++) {
avg += intArr[i];
}
avg = avg / (intArr.length - 2);
System.out.println("平均分:" + avg);
}
}
二、J1_29_2
求 n(2<=n<=10)个整数中倒数第二小的数。每一个整数都独立看成一个数,比如,有 三个数分别是
1,1,3,那么,第二小的数就是 1。(每个数 均小于 100) 说明:首先输入一个整数 n,然后输入 n 个数。请输出第 2 小的数。
例如输入: 5 -5 -10 10 50 80 程序输出第 2 小的数:-5
注意:使用循环实现。
代码如下:
public class Week02 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("输入整数 n:");
int n = Integer.valueOf(sc.nextLine());
int[] douArr = new int[n];
System.out.println("输入" + n + "个数:");
String str = sc.nextLine();
douArr = ParseIntArray(str.split("\\s+"));
douArr = SecNum(douArr);// 升序排序
System.out.println(douArr[1]);// 输出第 2 小的数
}
/**
* 冒泡排序法 传入一个无序的整形数组,返回按照升序排序的数组
*
* @param intArrays
* 整形数组
* @return 整形数组
*/
public static int[] SecNum(int[] intArrays) {
int[] intArr = intArrays;
// 循环对比数组中的值 ,升序排列
for (int i = 0; i < intArr.length; i++) {
// 当前第i个值,对比之前的值,如果比第j个值小,则交换位置,否则跳出循环.
for (int j = i; j > 0; j--) {
// 判断如果第j-1个数大于第j个数,则把第j-1个数和第j个数换位置,与小于i下标的所有数都进行判断
// 如果要降序排列,只需将大于符号改成小写即可
if (intArr[j - 1] > intArr[j]) {
int num = intArr[j - 1];// 获取第j-1个数
intArr[j - 1] = intArr[j];// 把第j个数赋值给第j-1个数
intArr[j] = num;// 把之前第j-1的数的值赋值给第j个数
} else {
break;
}
}
}
return intArr;
}
/**
* 传入字符串数组,返回数字数组 将字符串数组转换为数字数组
*
* @param str
* 字符串String类型数组
* @return int整形数组
*/
public static int[] ParseIntArray(String[] str) {
int[] intCount = new int[str.length];
for (int i = 0; i < str.length; i++) {
if (!str[i].matches("^-?\\d+(\\.\\d+)?$")) {
System.out.println("输入的数中有非数字");
return null;
}
intCount[i] = Integer.valueOf(str[i]);
}
return intCount;
}
}
二、J1_29_3
小明的老师今天教了冒泡排序,但是小明在网上找到一种更加方便的排序,但是小明不会使用,你能帮帮他吗?
定义一个 n 输入 n(0<n<1000)然后输入 n 正整数,输出从小到大 输入结果
注意:按照题目描述完成程序,使用 sort方法实现。
代码如下:
public class Week03 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("输入整数 n:");
int n = Integer.valueOf(sc.nextLine());
int[] douArr = new int[n];
System.out.println("输入" + n + "个数:");
String str = sc.nextLine();
douArr = ParseIntArray(str.split("\\s+"));
Arrays.sort(douArr);// 升序排序
for (int i : douArr) {
System.out.print(i + " ");
}
}
/**
* 传入字符串数组,返回数字数组 将字符串数组转换为数字数组
*
* @param str
* 字符串String类型数组
* @return int整形数组
*/
public static int[] ParseIntArray(String[] str) {
int[] intCount = new int[str.length];
for (int i = 0; i < str.length; i++) {
if (!str[i].matches("^-?\\d+(\\.\\d+)?$")) {
System.out.println("输入的数中有非数字");
return null;
}
intCount[i] = Integer.valueOf(str[i]);
}
return intCount;
}
}