Check-in diario 01 de la competencia de escalera (1-6 soluciones de problemas)

¡Acostúmbrate a escribir juntos! Este es el décimo día de mi participación en el "Nuggets Daily New Plan · April Update Challenge", haz clic para ver los detalles del evento .

prefacio

En general, la Copa Blue Bridge no es un golpe pequeño, por lo que esta vez continuaré controlando todos los días,> = 6 preguntas todos los días y comenzaré la capacitación básica de la PTA en orden. Check in el primer día

Cepillar hasta la muerte cepillar hasta la muerte. Aquí haré un orden sencillo según la dificultad de las preguntas.

L1-001 Hola mundo (5 años)

inserte la descripción de la imagen aquíAcostúmbrate al formato

import java.util.Scanner;
public class Main{
    public static void main(String[] args){
        Scanner Scanner = new Scanner(System.in);
        System.out.println("Hello World!");
    }
}
复制代码

L1-004 Calcular temperatura Celsius (5 puntos)

inserte la descripción de la imagen aquí

import java.util.Scanner;

public class Main{
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        int c = scanner.nextInt();
        c = 5*(c-32)/9;
        System.out.println("Celsius = "+c);
    }
}
复制代码

L1-003 Estadísticas de un solo dígito (15 puntos)

inserte la descripción de la imagen aquí

import java.util.Scanner;

public class Main {

    static int[] count;
    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);
        String InputString = scanner.next();
        count = new int[10];
        scanner.close();

        for (char c : InputString.toCharArray()) {
            count[c-'0']++;
        }
        for (int i = 0; i < count.length; i++) {
            if(count[i]!=0){
                System.out.println(i+":"+count[i]);
            }
        }

    }
}

复制代码

L1-005 Número de asiento del examen (15 puntos)

inserte la descripción de la imagen aquí

punto importante

Este tema es realmente muy simple. Es principalmente un problema de optimización de entrada. El escáner no puede funcionar. No tengo la capacidad de saberlo.


import java.io.*;
import java.util.Scanner;
import java.util.StringTokenizer;


/** Class for buffered reading int and double values */
class Reader {
    static BufferedReader reader;
    static StringTokenizer tokenizer;

    /**
     * call this method to initialize reader for InputStream
     */
    static void init(InputStream input) {
        reader = new BufferedReader(
                new InputStreamReader(input));
        tokenizer = new StringTokenizer("");
    }

    /**
     * get next word
     */
    static String next() throws IOException {
        while (!tokenizer.hasMoreTokens()) {
            //TODO add check for eof if necessary
            tokenizer = new StringTokenizer(
                    reader.readLine());
        }
        return tokenizer.nextToken();
    }

    static int nextInt() throws IOException {
        return Integer.parseInt(next());
    }

    static double nextDouble() throws IOException {
        return Double.parseDouble(next());
    }
}

public class Main {

    static Student[] Students;


    public static void main(String[] args) throws IOException {
        Reader.init(System.in);
        int N = Reader.nextInt();
        Students = new Student[N+1];
        for (int i = 0; i < N; i++) {

            Student student = new Student(Reader.next(),Reader.nextInt(),Reader.nextInt());
            Students[student.id_temp] = student;

        }


        int M = Reader.nextInt();
        for (int i = 0; i < M; i++) {

            find();
        }

    }

    public static void find() throws IOException {
        int id_temp = Reader.nextInt();
        Student student = Students[id_temp];

        System.out.println(student.id_stu+" "+student.id_set);
    }


    static class Student{
        String id_stu;
        int id_temp;
        int id_set;

        public Student(){}

        public Student(String id_stu, int id_temp, int id_set) {
            this.id_stu = id_stu;
            this.id_temp = id_temp;
            this.id_set = id_set;
        }

        @Override
        public String toString() {
            return "Student{" +
                    "id_stu='" + id_stu + '\'' +
                    ", id_temp=" + id_temp +
                    ", id_set=" + id_set +
                    '}';
        }
    }
}

复制代码

L1-002 Reloj de arena impreso (20 puntos)

inserte la descripción de la imagen aquí

ideas

De hecho, también es simple de decir.Principalmente necesitamos saber que nuestra capa principal tiene varias capas, y cada capa es regular.

Dado que este reloj de arena es una progresión aritmética, entonces d=2 por lo que la suma n(1+(n-1)*d+1)/2 = n^2/2. Sin embargo, cabe señalar que el N que ingresamos aquí es la suma de dos, la suma de las dos secuencias idénticas -1, porque la primera se superpone.

(Incluso si hay demasiados, no importa si se redondea automáticamente hacia abajo)

Luego hay varios elementos en cada capa, que también es una secuencia aritmética simple.

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        String ch = sc.next();

        int  h = (int) Math.sqrt((n+1)/2);// 计算高度

        for (int i = 0; i < h; i++)    //打印上半层沙漏
        {
            for (int j = 0; j < i; j++)
                System.out.print(" ");
            for (int j = 0; j < 2 * (h - i) - 1; j++)
                System.out.printf("%c", ch.toCharArray()[0]);
            System.out.println();

        }

        for (int i = 2; i <= h; i++)    //打印下半层沙漏
        {
            for (int j = 0; j < h - i; j++)
                System.out.print(" ");
            for (int j = 0; j < 2 * i - 1; j++)
                System.out.printf("%c", ch.toCharArray()[0]);
            System.out.print("\n");
        }
        System.out.printf("%d", n - 2 * h * h + 1);
    }
}


复制代码

L1-006 Factor continuo (20 puntos)

inserte la descripción de la imagen aquíEste tema es muy bueno, pero solo conozco la solución de fuerza bruta

ideas

O la idea de la violencia, lo primero es descomponer el divisor, aquí partimos de 2. Luego quiere incrementarse, por lo que 2 es su primer divisor, así que comencé a adivinar sum = 1 de 2, 2,3,4,5,6 sum para multiplicar estos números. Solo cuando sum<=n, registro la longitud de estos factores y el primer subíndice. Por ejemplo, el registro anterior es de 2 a 6. Dado que lo estamos buscando de menor a mayor, definitivamente no es la longitud más pequeña que se encuentra al principio. Así que hay que seguir mirando hacia delante y empezar de 3 en adelante.

En este momento, dado que estamos buscando divisores, primero podemos reducir la complejidad con Math.sqrt(N).

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		long i = 0, j = 0;
		long len = 0, start = 0, sum = 0;
		long n;
		Scanner sc = new Scanner(System.in);
		n = sc.nextInt();
		for (i = 2; i < Math.sqrt(n); i++) {
			sum = 1;
			for (j = i; sum <= n; j++) {
			// j表示当前因子,i表示首因子,sum表示目前乘积,开始暴力枚举
				sum = sum * j;
				if (n % sum == 0 && j - i + 1 > len) {
					start = i;
					len = j - i + 1;
				}
			}
		}
		if (start == 0) {
			start = n;
			len = 1;
		}
		System.out.println(len);
		for (int k = 0; k < len - 1; k++) {
			System.out.print(start + k + "*");
		}
		System.out.println(start + len - 1);
	}
}

复制代码

En cuanto a la optimización, creo que debería ser posible optimizar con la idea de KMP, porque no es posible seguir enumerando desde 3. Por ejemplo, 630, el mínimo es 4 5 6 7, el continuo es 5 6 7, es decir, de 2 4 5 67 por primera vez y luego registra 2 a 6 por segunda vez 3 4 5 6 7 registra 5 a 7 y comienza desde 4 por tercera vez. Así que piensa en esto.

Supongo que te gusta

Origin juejin.im/post/7084970288948969508
Recomendado
Clasificación