1、(九进制转换):
这段代码是解决一个九进制转换的问题。它提供了一个Java类Main
,其中包含main
方法和getResult
方法,用于将一个伪装成十进制数的九进制数转换为真正的十进制数。
main
方法首先读取一个伪装成十进制的长整数n
,然后将其每一位拆分并存储到数组arr
中。接着,调用getResult
方法并打印转换后的十进制数。
getResult
方法遍历数组arr
,对于每一位数字,如果它大于4,则减1以修正九进制的表示错误(因为在九进制中不存在5-9的数字)。然后,根据该数字在九进制数中的位置,将其乘以相应的9的幂次方。最后,将所有修正后的数字相加得到最终的十进制数。
2、(寻找身高相近的小朋友):
这段代码是解决“寻找身高相近的小朋友”的问题。它提供了一个Java类Main
,其中包含main
方法和sortHeight
方法,用于根据小明和其他小朋友的身高差进行排序。
main
方法首先读取小明的身高h
和班级中小朋友的个数n
,然后读取所有小朋友的身高并存储到数组heights
中。接着,调用sortHeight
方法并打印排序后的结果。
sortHeight
方法使用Arrays.sort
对小朋友的身高进行排序。排序时,首先比较身高差的绝对值,如果两个小朋友和小明的身高差绝对值相同,则比较他们的身高。排序完成后,使用StringJoiner
将排序后的身高数组拼接成一个字符串,并返回。
package OD242;
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//计费表的表面读数
long n = sc.nextLong();
//实际上是按九进制进位的,所以拆分
long[] arr = Arrays.stream(String.valueOf(n).split("")).mapToLong(Long::parseLong).toArray();
System.out.println(getResult(arr));
}
/**
* 实际上是将九进制数转为十进制数
*
* @param arr
* @return long
*/
public static long getResult(long[] arr) {
int correct = 0;
for (int i = 0; i < arr.length; i++) {
long fault = arr[i];
if (fault > 4) fault--;
//到达该位置需要经历j次 9进制
for (int j = arr.length - i - 1; j > 0; j--) {
fault *= 9;
}
correct += fault;
}
return correct;
}
}
package OD247;
import java.util.*;
/**
* @description 寻找身高相近的小朋友
* @level 4
* @score 100
* @url https://hydro.ac/d/HWOD2023/p/OD247
*/
/**
* 题目描述
* 小明今年升学到了小学1年级来到新班级后,发现其他小朋友身高参差不齐,然后就想基于各小朋友和自己的身高差,对他们进行排序,请帮他实现排序。
* <p>
* 输入描述
* 第一行为正整数 h和n,0<h<200 为小明的身高,0<n<50 为新班级其他小朋友个数。
* <p>
* 第二行为n个正整数,h1 ~ hn分别是其他小朋友的身高,取值范围0<hi<200,且n个正整数各不相同。
* <p>
* 输出描述
* 输出排序结果,各正整数以空格分割,
* <p>
* 和小明身高差绝对值最小的小朋友排在前面,
* <p>
* 和小明身高差绝对值最大的小朋友排在后面,
* <p>
* 如果两个小朋友和小明身高差一样,则个子较小的小朋友排在前面。
*/
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//小明身高
int h = sc.nextInt();
//小朋友个数
int n = sc.nextInt();
//小朋友
Integer[] heights = new Integer[n];
for (int i = 0; i < n; i++) {
heights[i] = sc.nextInt();
}
System.out.println(sortHeight(heights, h));
}
//按与小明身高差的绝对值从小到大排序
public static String sortHeight(Integer[] heights, int h) {
//排序 要使用Integer[]才能直接做“-“法
Arrays.sort(heights, (a, b) -> {
//身高差的绝对值
int absA = Math.abs(a - h);
int absB = Math.abs(b - h);
//绝对值升序
if (absA != absB) return absA - absB;
//绝对值相同,按身高排序
else return a - b;
});
StringJoiner sj = new StringJoiner(" ");
for (Integer height : heights) {
sj.add(height + "");
}
return sj.toString();
}
}