唯一一次笔试全部AK的,百分之百,还有十分钟就直接交卷了,思路可能并不是最好的,但是都100%啦。
第1题:问n!得到的值中0的个数,比如7!为5040,输出为2
package 第一题;import java.util.Scanner;public class Main {public static void main(String[] args) {// 将所有数据记录在0-26的数组中,记录个数,这样就会将O(n^3)复杂度转化为O(26^3)// 核心就是最终的值和字符串数组无关。 而字符串都是小写,长度26的数组就可以写出来了
// while (true){Scanner sc = new Scanner(System.in);int n = sc.nextInt();int result = 1;// 计算总和for(int i = 1; i <= n; i++){result = result * i;}System.out.println(result);// 计算0的个数int count = 0;while (result != 0){if(result % 10 == 0)count++;result = result / 10;}System.out.println(count);
// }}
}
第2题:相邻字符串可以进行变化,比如a可以变成b,a还可以变成z。问给一个字符串,最少执行多少次变化,可以使得字符串都是一样的。其中字符串都是小写字符。
package 第二题;import java.util.Scanner;public class Main {public static void main(String[] args) {
// while (true){// 将所有数据记录在0-26的数组中,记录个数Scanner sc = new Scanner(System.in);String s = sc.nextLine();int count = 0;int[] data = new int[26];// 将所有的数据记录在列表中for (int i = 0; i < s.length(); i++) {data[s.charAt(i) - 'a']++;}System.out.println(doubleMinValue(data));
// }}public static long doubleMinValue(int[] data){long result = Integer.MAX_VALUE;for (int i = 0; i < 26; i++) {if(data[i] == 0)continue;// 如果选择第i个作为中心,计算最小变化量long count = 0;// 开始进行计算for (int j = 0; j < 26; j++) {if(i == j || data[j] == 0)continue;if(i < j){// 正向值int left = j - i;// 负向值int right = 26 - j + i;count = Math.min(left, right) * data[j] + count;}else {int left = j + 26 - i;int right = i -j;count = Math.min(left, right) * data[j] + count;}}if(result > count)result = count;}return result;}
}
第3题:格式化输出问题
package 第三题;import java.util.Scanner;public class Main {public static void draw(int count, String line) {for (int i = 0; i < count; i++) {System.out.print(line);}}// 画出第一行 ...........public static void draw1(int count) {for (int i = 0; i < count; i++) {draw(count, "...........");System.out.println();}}// 画出第二行 ..*******..public static void draw2(int count) {for (int i = 0; i < count; i++) {// 画出左边draw(count, "..");// 画出中间draw(count, "*******");// 画出右边draw(count, "..");System.out.println();}}// 画出第三行 ..*..*..*..public static void draw3(int count) {for (int i = 0; i < count; i++) {draw(count, "..");draw(count, "*");draw(count, "..");draw(count, "*");draw(count, "..");draw(count, "*");draw(count, "..");System.out.println();}}// 画出第四行 ..*******..public static void draw4(int count) {draw2(count); // 与第2行一样}// 画出第5行 ..*..*..*..public static void draw5(int count) {draw3(count);}// 画出第6行public static void draw6(int count) {draw2(count);}// 画出第7行 .....*.....public static void draw7(int count) {for (int i = 0; i < count; i++) {// 左draw(count, ".....");// 中draw(count, "*");// 右draw(count, ".....");System.out.println();}}// 8public static void draw8(int count) {draw2(count);}// 9 .....*.....public static void draw9(int count) {draw7(count);}// 10 .*********.public static void draw10(int count) {for (int i = 0; i < count; i++) {draw(count, ".");draw(count, "*********");draw(count, ".");System.out.println();}}// 11 .*********.public static void draw11(int count) {draw1(count);}public static void main(String[] args) {Scanner sc = new Scanner(System.in);// 思路:分行进行输出,每一行进行私有化定义int at = sc.nextInt();draw1(at);draw2(at);draw3(at);draw4(at);draw5(at);draw6(at);draw7(at);draw8(at);draw9(at);draw10(at);draw11(at);}
}