网易9/19
网易9/19
写在最前面:等一个大佬分享一下第一题和最后一题的正解
备注:并非全A,分别是75/100/100/90
第一题 涂格子
找到最多的颜色,第一次整个涂上,然后再遍历,当少数颜色出现,上一个是多数颜色count++,不是多数颜色不管他
import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; public class WY01 { public static void main(String[] args) { Scanner in = new Scanner(System.in); String m = in.nextLine(); String line = in.nextLine(); int countR = 0; if (line.charAt(0) == 'R')countR++; Queue<Integer> queue = new LinkedList<>(); for (int i = 1; i < line.length(); i++) { //红色的数量 if (line.charAt(i) == 'R'){ countR++; } } int countB = line.length() - countR; if (countB >= countR){ System.out.println(countCh(line,queue,'B')+1); }else { System.out.println(countCh(line,queue,'R')+1); } } private static int countCh(String line, Queue<Integer> queue, char color){ int res = 0; if (line.charAt(0) != color){ res++; } for (int i = 1; i < line.length(); i++) { if (line.charAt(i) != color){ if (line.charAt(i-1) != color){ continue; }else { res++; } } } return res; } }
第二题 找它数
import java.util.Scanner; public class WY02 { public static void main(String[] args) { Scanner in = new Scanner(System.in); String lien = in.nextLine(); String[] sij = lien.split(" "); int x = Integer.valueOf(sij[0]); int y = Integer.valueOf(sij[1]); if (y%x != 0){ System.out.println("-1"); }else { int res = y/x; for (int i = 2; i <= res; i++) { if (res%i == 0){ System.out.println(times(res)); break; } } } } private static int times(int res){ int resoult = 0; for (int i = 2; i <= res; i++) { if (res%i == 0){ resoult += times(res/i)+1; break; } } return resoult; } }
第三题 AcMer 字符串处理
import java.util.Scanner; public class WY03 { public static void main(String[] args) { Scanner in = new Scanner(System.in); String line = in.nextLine(); int min = Integer.MAX_VALUE; for (int i = 0; i < line.length()-4; i++) { int count = 0; //A if (line.charAt(i) == 'A'){ }else if (line.charAt(i) == 'a' || line.charAt(i) <= 'Z'&& line.charAt(i) >= 'A'){ count += 5; }else { count += 10; } if(count > min) continue; //c if (line.charAt(i+1) == 'c'){ }else if (line.charAt(i+1) == 'C' || line.charAt(i+1) <= 'z'&& line.charAt(i+1) >= 'a'){ count += 5; }else { count += 10; } if(count > min) continue; //M if (line.charAt(i+2) == 'M'){ }else if (line.charAt(i+2) == 'm'|| line.charAt(i+2) <= 'Z'&& line.charAt(i+2) >= 'A'){ count += 5; }else { count += 10; } if(count > min) continue; //e if (line.charAt(i+3) == 'e'){ }else if (line.charAt(i+3) == 'E'|| line.charAt(i+3) <= 'z'&& line.charAt(i+3) >= 'a'){ count += 5; }else { count += 10; } if(count > min) continue; //r if (line.charAt(i+4) == 'r'){ }else if (line.charAt(i+4) == 'R'||line.charAt(i+4) <= 'z'&& line.charAt(i+4) >= 'a'){ count += 5; }else { count += 10; } min = Math.min(count,min); } System.out.println(min); } }
第四题 找公比
1+n*公比 = 结果
所以结果-1除以公比余数为0,以此去掉一些不必要的遍历
正确做法应该不是这样,看看得了
import java.util.Scanner; public class WY04 { public static void main(String[] args) { Scanner in = new Scanner(System.in); int t = in.nextInt(); for (int i = 0; i < t; i++) { int num = in.nextInt(); //q^n = (q-1)x + 1 int q = 0; int n = 0; for (int j = 2; j < num; j++) { //如果公比为偶数,目标为偶数,则此公比不可能匹配 /* if( j%2 == 0 && num%2 == 0){ continue; }*/ //除了第一项,其它均为公比倍数相加,除以公比必余0 if((num-1)%j != 0){ continue; } int sum = 1; q = j; n = 1; while(sum < num){ sum += q; q = q*j; n++; } if (sum == num){ q = j; break; } } System.out.println(n +" " + q); } } }