单词分析(2020省赛)
思路:
该题为简单题,就是对数组中出现的字母的次数进行统计然后输出出现次数最多的字母及其次数,博主利用String类自带函数String.toCharArray()讲数组转换为字符串,然后遍历数组进行统计。
public static void main(String[] args) { Scanner scan = new Scanner(System.in); String str=scan.next(); char []arr=str.toCharArray(); //字符串转换为数组 int []a=new int[26]; //建立a数组用于记录每个字母出现的次数,该数组的角标表示从a--z for(char s:arr) { a[s-'a']++; /*数组内元素初始均为0,遍历数组时对应角标出现进行++, 使得数组的对应角标存储相应字母出现次数*/ } char c='a'; int max=Integer.MIN_VALUE; //遍历数组找出出现次数最多字母 for (int i = 0; i < 26; i++) { if(a[i]>max) { max=a[i]; c=(char)('a'+i); } } System.out.println(c); System.out.println(max); scan.close(); }
成绩统计(2020省赛)
思路:该题就是利用Math函数完成四舍五入,小技巧(设计浮点数计算时,建议默认为double型,防止数据丢失)
public static void main(String[] args) { Scanner scan = new Scanner(System.in); int n=scan.nextInt(); double a=0,b=0; for(int i=0;i<n;i++) { int x=scan.nextInt(); if(x>=60) { a++; if(x>=85) b++; } } System.out.println(Math.round(a*100/n)+"%"); System.out.println(Math.round(b*100/n)+"%"); scan.close(); }
回文日期(2020省赛)
思路:这道题相对前两道题稍微有点点难度,判断回文日期。
博主该题的题解思路比较暴力,是直接取输入日期的前四位,将其转换为字符串以后进行倒置,这样生成的数字一定是回文数字,只需进行以下两步就可以完成该题。
1:判断后四位日期是否合法
2:如果是回文数再判断是不是ABABBABA 型日期(只需判断后四位是不是BABA型)
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scan = new Scanner(System.in); int n=scan.nextInt(); String s3=String.valueOf(n); //s3作用是为了在后边输出数字时跳过输入的日期,因为题目要求时下一个 n=n/10000;//取前四位日期数 int count=0; //因为只需输出两行,count到达2时直接跳出循环 for (int i = n; i <= 9999; i++) { String s1=String.valueOf(i); //将前四位数字转换为字符串 StringBuilder str=new StringBuilder(s1); //利用StringBuilder的特性将字符串倒置 str.reverse(); String s2=str.toString(); String Month=s2.substring(0,2); //截取倒置后数组前两位数字即为月份,后两位即为日期 String Date=s2.substring(2); int year=i; int month=Integer.parseInt(Month); int date=Integer.parseInt(Date); String s=s1+s2; //s完成拼接 if(checkIs(year,month,date)&&!(s.equals(s3))) { //!(s.equals(s3))就是为了跳过输入的日期 if(count==0) { //回文日期只输出1次,所以输出条件为(count==0) System.out.println(s); count++; } if(checkAs(s2)) { System.out.println(s); count++; } //因为该日期可能既是回文日期,又是ABABBABA型,所以同一个日期进行二次判断 } if(count==2) break; } scan.close(); } //判断合法性 public static boolean checkIs(int year,int month,int date) { if(month<1||month>12||date<1||date>31) return false; if(month==2||month==4||month==6||month==9||month==11) { if(date==31) return false; if(!(year%400!=0||(year%4==0&&year%100!=0))) { if (date==29) return false; } } return true; } //判断是否为ABABBABA public static boolean checkAs(String s) { if(s.charAt(0)==s.charAt(2)&&s.charAt(1)==s.charAt(3)) return true; return false; } }
门牌制作(2020省赛)
思路:该题较为简单,只需统计从1到2020数字2出现的次数即可
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scan = new Scanner(System.in); System.out.println(624); scan.close(); } }