1、成绩排序
输入任意(用户,成绩)序列,可以获得成绩从高到低或从低到高的排列,相同成绩都按先录入排列在前的规则处理。
import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class Main3 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); while (scanner.hasNext()) { int numPeople = scanner.nextInt(); int option = scanner.nextInt(); List<Student> stuList = new ArrayList<>(); for (int i = 0; i < numPeople; i++) { stuList.add(new Student(scanner.next(), scanner.nextInt())); } if (option == 0) { stuList.sort((o1, o2) -> o2.score - o1.score); } else if (option == 1) { stuList.sort((o1, o2) -> o1.score - o2.score); } for (Student student : stuList) { System.out.println(student.name + " " + student.score); } } } class Student { public String name; public int score; public Student(String name, int score) { this.name = name; this.score = score; } } }思路:定义一个类表示姓名和成绩,按照排序策略输入人名和成绩,再进行输出。
2、链式A+B
有两个用链表表示的整数,每个结点包含一个数位。这些数位是反向存放的,也就是个位排在链表的首部。编写函数对这两个整数求和,并用链表形式返回结果。
public class Plus { public ListNode plusAB(ListNode a, ListNode b) { ListNode newHead = new ListNode(0); int sum = 0; ListNode tmp = newHead; while (a!=null || b!=null || sum != 0) { if (a != null) { sum += a.val; a = a.next; } if(b != null) { sum += b.val; b = b.next; } tmp.next = new ListNode(sum % 10); sum = sum / 10; tmp = tmp.next; } return newHead.next; } }思路:采用链表遍历,节点元素求和加进位计算。
3、最高分是多少
老师想知道从某某同学当中,分数最高的是多少,现在请你编程模拟老师的询问。当然,老师有时候需要更新某位同学的成绩.
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int n = 0; int m = 0; while (scanner.hasNext()) { n = scanner.nextInt(); m = scanner.nextInt(); int[] stu = new int[n]; for (int i = 0; i < n; i++) { stu[i] = scanner.nextInt(); } for (int i = 0; i < m; i++) { String c = scanner.next(); int a = scanner.nextInt(); int b = scanner.nextInt(); if (c.equals("Q")) { int s = Math.min(a, b);//开始下标 int e = Math.max(a, b);//结束下标 int max = stu[s - 1]; for (int index = s; index < e; index++) { max = Math.max(max, stu[index]); } System.out.println(max); } if (c.equals("U")) { stu[a - 1] = b; } } } } }思路:第一行:n 个学生 m 老师可以询问或者更新m次,第二行:1~ n 个学生的成绩,学生ID也从 1 ~ n。m 行:老师操作 Q 询问指定ID范围的学生成绩,输出最高成绩,老师操作 U 更新D的学生成绩。交互式输入: 学生数量,老师可操作次数,学生成绩 循环执行m次,如果输入Q进行最大分数计算,如果输入U进行分数更新。
4、人民币转换
中文大写金额数字前应标明“人民币”字样。中文大写金额数字应用壹、贰、叁、肆、伍、陆、柒、捌、玖、拾、佰、仟、万、亿、元、角、分、零、整等字样填写。
中文大写金额数字到“元”为止的,在“元”之后,应写“整字,如¥ 532.00应写成“人民币伍佰叁拾贰元整”。在”角“和”分“后面不写”整字。
阿拉伯数字中间有“0”时,中文大写要写“零”字,阿拉伯数字中间连续有几个“0”时,中文大写金额中间只写一个“零”字,如¥6007.14,应写成“人民币陆仟零柒元壹角肆分“。
import java.util.Scanner; public class Main{ //阿拉伯数字0-9对应的中文 static String[] map = {"壹","贰","叁","肆","伍","陆","柒","捌","玖"}; public static void main(String[] args){ Scanner scan = new Scanner(System.in); while(scan.hasNext()){ String number = scan.next(); resolve(number); } scan.close(); } public static void resolve(String str){ String[] strArr = str.split("\\."); int number = Integer.valueOf(str.split("\\.")[0]); StringBuffer res = new StringBuffer("人民币"); int yi = (int)(number/100000000); if(yi!=0){ res.append(resolveQian(yi)).append("亿"); number = number-yi*100000000; } int wan = (int)(number/10000); if(wan!=0){ res.append(resolveQian(wan)).append("万"); number = number-wan*10000; } String beforePointString = resolveQian(number); if(beforePointString.length()>1){ res.append(beforePointString).append("元"); } if(strArr.length>1){ String afterPointStr = strArr[1]; res.append(handleNumberAfterPoint(afterPointStr)); } String resString = res.toString(); if(resString.length()>4 && resString.charAt(3)=='零' && resString.charAt(4)!='元'){ resString = resString.substring(0,3)+resString.substring(4); } System.out.println(resString); } public static String resolveQian(double temp){ StringBuffer resBuffer = new StringBuffer(); int qian = (int)(temp/1000); if(qian!=0){ resBuffer.append(map[qian-1]).append("仟"); temp = temp-qian*1000; } int bai = (int)(temp/100); if(bai!=0){ resBuffer.append(map[bai-1]).append("佰"); temp = temp-bai*100; } if(qian!=0 && bai==0){ resBuffer.append("零"); } int shi = (int)(temp/10); if(shi!=0){ if(shi!=1){ resBuffer.append(map[shi-1]); } resBuffer.append("拾"); temp = temp-shi*10; } if(bai!=0&&shi==0){ resBuffer.append("零"); } int ge = (int)(temp); if(ge!=0){ if(qian==0&&bai==0&&shi==0){ resBuffer.append("零"); } resBuffer.append(map[ge-1]); } String res = resBuffer.toString(); return res; } public static String handleNumberAfterPoint(String str){ String res = ""; if(str.equals("00") ||str.equals("0")){ res = "整"; }else{ if(str.charAt(0)!='0'){ res += map[Integer.valueOf(str.charAt(0)+"")-1]+"角"; } if(str.length()>1 && str.charAt(1)!='0'){ res += map[Integer.valueOf(str.charAt(1)+"")-1]+"分"; } } return res; } }思路:第一步:解析字符串;第二步:整数部分:按照 亿,万,千百十个位处理;第三步:小数部分:按照 角,分处理。