一、输入输出题目 1多组AB基础版题目描述输入多组数据每组数据包含两个整数 A 和 B计算它们的和。输入以 文件结尾EOF 结束。输入格式每行包含两个整数 A 和 B-10^9 ≤ A, B ≤ 10^9。输出格式对于每组输入输出 AB 的结果每行输出一个结果。输入示例1 23 45 6输出示例3711解题思路题目要求输入多组数据并且以EOFEnd Of File结束因此不能使用固定次数的循环。使用 Scanner.hasNextInt() 或 BufferedReader.readLine() 来判断是否有新的输入。方法一import java.util.Scanner; import java.util.*; public class Main { public static void main(String[] args) { Scanner scanner new Scanner(System.in); ListInteger list new ArrayList(); while(scanner.hasNext()){ int a scanner.nextInt(); int b scanner.nextInt(); list.add(ab); } for(int i : list){ System.out.println(i); } scanner.close(); } }方法二BufferedReader 可以包装任何 Reader 子类为其增加缓冲功能。常见的组合包括:FileReader 用于读取字符文件InputStreamReader 将字节流转换为字符流StringReader 从String中读取字符readLine 方法readLine()是 BufferedReader 最常用的方法之一它读取一整行文本直到遇到行终止符\n \r 或 “\r\n”。String line; while ((line br.readLine()) ! null) { System.out.println(line); }readLine()方法的实现原理:从缓冲区读取字符,直到遇到换行符或到达缓冲区末尾如果缓冲区已空,则从底层流读取更多数据返回不包含行终止符的字符串import java.util.Scanner; import java.util.*; import java.io.*; import java.io.IOException; public class Main { public static void main(String[] args) throws IOException { Scanner scanner new Scanner(System.in); BufferedReader br new BufferedReader(new InputStreamReader(System.in)); ListInteger list new ArrayListInteger(); String line; while((line br.readLine() )!null){ String nums[] line.split( ); int a Integer.parseInt(nums[0]); int b Integer.parseInt(nums[1]); list.add(ab); } for (Integer integer : list) { System.err.println(integer); } scanner.close(); } }题目 2计算圆的面积题目描述输入一个半径 r计算圆的面积并保留两位小数。输入格式输入一个正整数 r1 ≤ r ≤ 1000输出格式输出圆的面积结果保留两位小数。输入示例2输出示例12.57解题思路计算圆的面积公式为 π * r * r。需要使用 格式化输出保留两位小数使用 System.out.printf(%.2f, area);import java.util.Scanner; import java.util.*; public class Main{ public static void main(String[] args){ Scanner scanner new Scanner(System.in); int r scanner.nextInt(); System.out.printf(%.2f,Math.PI * r * r); scanner.close(); } }题目 3整数除法题目描述输入两个整数 A 和 B计算 A 除以 B 的整数部分以及余数。输入格式输入包含两个整数 A 和 B-10^9 ≤ A ≤ 10^9, 1 ≤ B ≤ 1000。输出格式输出 A 除以 B 的整数部分和余数用空格隔开。输入示例10 3输出示例3 1解题思路直接使用 A / B 求整数部分使用 A % B 求余数import java.util.Scanner; import java.util.*; public class Main{ public static void main(String[] args){ Scanner scanner new Scanner(System.in); int a scanner.nextInt(); int b scanner.nextInt(); System.out.println(a / b a % b); scanner.close(); } }题目 4换行输入的 AB题目描述输入两行每行一个整数 A 和 B计算 AB。输入格式第一行输入整数 A-10^9 ≤ A ≤ 10^9第二行输入整数 B。输出格式输出 AB 的结果。输入示例56输出示例11解题思路需要读取 两行 输入并计算它们的和。import java.util.Scanner; import java.util.*; public class Main{ public static void main(String[] args){ Scanner scanner new Scanner(System.in); int a scanner.nextInt(); int b scanner.nextInt(); System.out.println(ab); scanner.close(); } }题目 5浮点数的四舍五入题目描述输入一个浮点数 x0 ≤ x ≤ 10000对其进行四舍五入输出整数。输入格式输入一个浮点数 x。输出格式输出 x 四舍五入后的整数。输入示例3.6输出示例4解题思路直接使用 Math.round(x) 进行四舍五入import java.util.Scanner; import java.util.*; public class Main{ public static void main(String[] args){ Scanner scanner new Scanner(System.in); double a scanner.nextDouble(); System.out.println(Math.round(a)); scanner.close(); } }题目6大数求和int溢出问题题目描述输入两个整数A和B取值范围为-1e18到1e18输出AB的值。输入示例1000000000000000000 2000000000000000000输出示例:3000000000000000000import java.util.Scanner; import java.math.BigInteger; import java.util.*; import java.io.*; import java.io.IOException; public class Main{ public static void main(String[] args) throws IOException { Scanner scanner new Scanner(System.in); BufferedReader br new BufferedReader(new InputStreamReader(System.in)); String[] nums br.readLine().split( ); BigInteger a new BigInteger(nums[0]); BigInteger b new BigInteger(nums[1]); System.out.println(a.add(b)); scanner.close(); } }题目7星期计算蓝桥杯真题第十三届蓝桥杯Java B组省赛已知今天是星期六请问天后是星期几?注意用数字 1 到 7表示星期一到星期日import java.util.Scanner; import java.math.BigInteger; import java.util.*; public class Main{ public static void main(String[] args){ Scanner scanner new Scanner(System.in); BigInteger a BigInteger.valueOf(20); BigInteger b a.pow(22); BigInteger c BigInteger.valueOf(7); BigInteger d b.mod(c); System.out.println(d); scanner.close(); } }开始时星期六加一天那就是星期日输出7即可题目8外星日历题目描述某星系深处发现了文明遗迹。他们的计数也是用十进制。他们的文明也有日历。日历只有天数没有年、月的概念。有趣的是他们也使用了类似“星期”的概念只不过他们的一个星期包含了9天为了方便这里分别记为: A,B,C…H,I从一些资料上看到他们的23日是星期E他们的190日是星期A他们的343251日是星期I令人兴奋的是他们居然也预见了“世界末日”的那天当然是一个很大很大的数字651764141421415346185请你计算一下这遥远的一天是该文明的星期几你需要提交的是一个大写字母表示该文明的星期几不要填写任何多余的内容。import java.util.Scanner; import java.math.BigInteger; import java.util.*; public class Main{ public static void main(String[] args){ Scanner scanner new Scanner(System.in); char[] c {I,A,B,C,D,E,F,G,H}; BigInteger a new BigInteger(651764141421415346185); BigInteger b BigInteger.valueOf(9); BigInteger result a.mod(b); int index result.intValue(); System.out.println(c[index]); scanner.close(); } }二、条件和循环题目1闰年判断题目描述输入一个年份判断是否为闰年。闰年规则1. 能被4整除但不能被100整除2. 或能被400整除。输入示例2000输出示例trueimport java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner new Scanner(System.in); int year scanner.nextInt(); if((year % 4 0 year % 100 ! 0) || year % 400 0 ){ System.out.println(YES); }else{ System.out.println(NO); } scanner.close(); } }题目2计算阶乘题目描述输入一个整数n0 ≤ n ≤ 12输出n的阶乘n!。输入示例5输出示例120import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner new Scanner(System.in); int num scanner.nextInt(); if(num 0 ){ System.out.println(负数没有阶乘); }else if(num 0){ System.out.println(1); }else{ long result fac(num); System.out.println(result); } scanner.close(); } public static int fac(int num) { if(num 1){ return 1; }else{ return num * fac(num-1); } } }题目3输出斐波那契数列前n项题目描述输入一个整数nn ≥ 1输出斐波那契数列的前n项每项用空格分隔。斐波那契数列定义- F(0) 0, F(1) 1- F(n) F(n-1) F(n-2)n ≥ 2输入示例5输出示例0 1 1 2 3解法一递归法import java.util.*; import java.util.Scanner; public class Main { static ListInteger list new ArrayList(); public static void main(String[] args) { Scanner scanner new Scanner(System.in); int n scanner.nextInt(); for(int i1; i n; i){ list.add(fib(i)); } for (int a : list) { System.out.print(a ); } scanner.close(); } public static int fib(int n){ if(n 1){ return 1; }else if(n 2){ return 1; }else{ return fib(n-1) fib(n-2); } } }解法二迭代法import java.util.*; public class Main { static ListInteger list new ArrayList(); public static void main(String[] args) { Scanner scanner new Scanner(System.in); int n scanner.nextInt(); fib(n); for (int a : list) { System.out.print(a ); } } public static void fib(int n) { int a 1; int b 1; if (n 0) { list.add(a); } else if (n 1) { list.add(b); } else { list.add(1); list.add(1); for (int i 2; i n; i) { int c a b; a b; b c; list.add(c); } } } }解法三动态规划import java.util.*; public class Main { static ListInteger list new ArrayList(); public static void main(String[] args) { Scanner scanner new Scanner(System.in); int n scanner.nextInt(); fib(n); for (int a : list) { System.out.print(a ); } } public static void fib(int n) { if (n 1) { list.add(1); }else if (n 2) { list.add(1); }else { list.add(1); list.add(1); for(int i 2 ; i n ; i){ int c list.get(i-1) list.get(i-2); list.add(c); } } } }题目4判断素数题目描述输入一个整数nn ≥ 0判断是否为素数质数。输入示例17输出示例trueimport java.util.*; import java.util.Scanner; public class Main { static ListInteger list new ArrayList(); public static void main(String[] args) { Scanner scanner new Scanner(System.in); int n scanner.nextInt(); boolean isPrime true; if(n 1){ isPrime false; }else{ for(int i2; iMath.sqrt(n); i){ if(n % i 0){ isPrime false; break; } } } System.out.println(isPrime); scanner.close(); } }题目5数字反转题目描述输入一个整数n-10000 ≤ n ≤ 10000输出反转后的数字保留符号去除前导零。输入示例-1230输出示例-321import java.util.*; import java.util.Scanner; public class Main { static ListInteger list new ArrayList(); public static void main(String[] args) { Scanner scanner new Scanner(System.in); int n scanner.nextInt(); int sign n 0 ? -1 : 1; n Math.abs(n); int reversed 0; while(n!0){ int digit n%10; reversed reversed*10 digit; n/10; } System.out.println(sign*reversed); scanner.close(); } }注意符号位前导0绝对值问题6汉诺塔问题题目介绍汉诺塔问题汉诺塔问题是一个经典的递归问题目标是把所有盘子从一根柱子移动到另一根柱子每次只能移动一个盘子且大盘子不能放在小盘子上面。有 n 个盘子从 A 移到 C借助 B。规则一次只能移动一个盘子不能将大盘子放在小盘子上输入3输出Move disk 1 from A to CMove disk 2 from A to BMove disk 1 from C to BMove disk 3 from A to CMove disk 1 from B to AMove disk 2 from B to CMove disk 1 from A to Cimport java.util.Scanner; import java.util.*; public class Main { public static void main(String[] args) { Scanner scanner new Scanner(System.in); int num scanner.nextInt(); hanoi(num, A, B, C); scanner.close(); } public static void hanoi(int n ,char from ,char to , char temp){ if(n 1){ System.out.println(Move disk 1 from fromtoto); }else{ hanoi(n-1,from,temp,to); System.out.println(Move disk n from fromtoto); hanoi(n-1,temp,to,from); } } }三、字符串操作题目1字符串反转题目描述输入一个字符串输出它的反转结果。输入示例hello输出示例ollehimport java.util.Scanner; import java.util.*; public class Main { public static void main(String[] args) { Scanner scanner new Scanner(System.in); String s scanner.nextLine(); StringBuffer st new StringBuffer(s); st.reverse(); System.out.println(st); scanner.close(); } }String类型没有直接反转的方法可以利用StringBuffer里的reverse()方法题目 2统计字符出现次数题目描述输入一个字符串统计其中每个字符出现的次数。输入示例aabbbcccc输出示例a:2b:3c:4import java.util.Scanner; import java.util.*; public class Main { public static void main(String[] args) { Scanner scanner new Scanner(System.in); String s scanner.nextLine(); char[] c s.toCharArray(); MapCharacter,Integer map new HashMap(); for(char ch : c){ if(map.containsKey(ch)){ map.put(ch , map.get(ch)1); }else{ map.put(ch,1); } } for(Map.EntryCharacter,Integer entry : map.entrySet()){ System.out.println(entry.getKey() : entry.getValue()); } scanner.close(); } }题目3判断回文串题目描述输入一个字符串判断它是否是回文即正着和反着读都一样。输入示例abba输出示例YESimport java.util.Scanner; import java.util.*; public class Main { public static void main(String[] args) { Scanner scanner new Scanner(System.in); String s scanner.nextLine(); StringBuffer st new StringBuffer(s); st.reverse(); String str st.toString(); if (s.equals(str)) { System.out.println(YES); }else{ System.out.println(NO); } scanner.close(); } }注意利用StringBuffer反转之后一定要再次转成String类型不然数据类型不匹配的话怎么比较都是错误四、综合应用学生成绩管理系统目标输入学生姓名和成绩存储数据ArrayList HashMap计算平均分找出最高分、最低分按成绩排序import java.util.*; import java.util.Scanner; /* 输入学生姓名和成绩 存储数据 计算平均分 找出最高分、最低分 按成绩排序 按姓名查询 */ public class studentSystem{ public static void main(String[] args){ Scanner scanner new Scanner(System.in); Liststudent stu new ArrayList(); while(scanner.hasNext()){ String name scanner.next(); double score scanner.nextDouble(); stu.add(new student(name,score)); } double maxScore stu.get(0).score; double minScore stu.get(0).score; double sumScore 0; for(student student : stu){ sumScore student.score; maxScore Math.max(maxScore, student.score); minScore Math.min(minScore, student.score); } double avgScore sumScore / stu.size(); System.out.println(平均分 avgScore); System.out.println(最高分 maxScore); System.out.println(最低分 minScore); Collections.sort(stu); for(student student : stu){ System.out.println(student.name student.score); } scanner.close(); } } class student implements Comparablestudent{ String name; double score; public student(String name , double score){ this.name name; this.score score; } public student(){ } public int compareTo(student other){ return Double.compare(this.score, other.score); } }