Blue Bridge Cup Pregunta 0410

1. Error de factura

Descripción del título:
Cierta unidad relacionada con el secreto emitió un cierto tipo de facturas, y todas ellas deberían recuperarse al final del año.

Cada factura tiene un número de identificación único. Los números de identificación de todas las facturas son continuos durante todo el año, pero el número inicial de la identificación se selecciona al azar.

Debido a la negligencia del personal, se produjo un error al ingresar el número de identificación, lo que provocó que se rompiera una identificación y se volviera a numerar otra identificación.

Su tarea es encontrar la identificación del número roto y la identificación del número múltiple a través de la programación.

Se supone que la ruptura del número no puede ocurrir en los números máximo y mínimo.

Se requiere que el programa ingrese primero un número entero N (N <100) para indicar el número de filas de datos que siguen.
Luego lea en N filas de datos.
La longitud de los datos de cada línea es desigual y son varios (no más de 100) enteros positivos (no más de 100000) separados por espacios.
Cada número entero representa un número de identificación.

El programa es necesario para generar 1 línea, que contiene dos enteros mn, separados por espacios.
Entre ellos, m representa ID rota, n representa ID múltiple

Por ejemplo:
Entrada del usuario:
2
5 6 8 11 9
10 12 9

Luego la salida del programa:
7 9

Otro ejemplo:
entrada del usuario:
6
164 178 108 109 180 155 141 159 104 182 179 118 137 184 115 124 125 129 168 196
172 189 127 107 112 192 103 131 133 169 158 158
102 102 110 148 139 157 140 195 197
185 152 135 106 123 173 122 136 174 191 145 116 151 143 175 120 161 134 162 190
149 138 142 146 199 126 165 156 153 193 144 166 170 121 171 132 101 194 187 188
113 130 176 154 177 120 117 150 114 183 186 181 100 163 160 167 147 198 111 119

Luego la salida del programa:
105 120

import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;

public class Main {

    private static Scanner input;

    public static void main(String[] args) {
        input = new Scanner(System.in);
        ArrayList list = new ArrayList<Integer>();

        int N = input.nextInt();
        input.nextLine(); // 去掉整数后面的换行符
        for (int i = 0; i < N; i++) {
            String line = input.nextLine();
            String[] split = line.split(" ");
            for (int j = 0; j < split.length; j++) {
                list.add(Integer.parseInt(split[j]));
            }
        }
        
        Collections.sort(list); // 对集合进行排序
        int a = 0, b = 0; // a接收断号的 b接收重号的
        for (int i = 1; i < list.size(); i++) {
            int cur = (int) (list.get(i));
            int pre = (int) (list.get(i - 1));
            if (cur - pre == 2) {
                a = (int)(list.get(i)) - 1;
            }
            if (cur - pre == 0) {
                b = (int)(list.get(i));
            }
        }
        System.out.println(a + " " + b);
    }

}

2. Número de la suerte

Descripción del título El
número de la suerte fue nombrado por el matemático polaco Ulam. Se genera utilizando un "método de tamizado" similar a la generación de números primos.

Comience escribiendo los números naturales 1, 2, 3, 4, 5, 6, ...

1 es el primer número de la suerte.
Comenzamos con el número 2. Elimine todos los elementos cuyo número de serie es divisible por 2 para convertirse en:

1 _ 3 _ 5 _ 7 _ 9 ...

Apriete y reordenarlos como:

1 3 5 7 9…. En este momento, 3 es el segundo número de la suerte, y luego se eliminan todos los números que se pueden dividir por 3. ¡Tenga en cuenta que es la posición del número de serie, no si el número en sí es divisible por 3! La eliminación debe ser 5, 11, 17, ...

En este momento, 7 es el tercer número de la suerte, y luego elimina la posición del número que se puede dividir por 7 (19,39, ...)

La última secuencia restante es similar:

1, 3, 7, 9, 13, 15, 21, 25, 31, 33, 37, 43, 49, 51, 63, 67, 69, 73, 75, 79,…

Esta pregunta requiere:

Ingrese dos enteros positivos mn, separados por espacios (m <n <1000 * 1000) El
programa genera el número de números de la suerte entre m y n (excluyendo m y n).

Por ejemplo:
Entrada del usuario:
1 20
Salida del programa:
5

Por ejemplo:
Entrada del usuario:
30 69
Salida del programa:
8

Convención de recursos:
consumo máximo de memoria (incluida la máquina virtual)
<64 M de consumo de CPU <2000 ms

Imprima estrictamente de acuerdo con los requisitos y no imprima contenido adicional como: "Ingrese ..."

Todo el código se coloca en el mismo archivo fuente. Después de la depuración, copie y envíe el código fuente.
Nota: No use declaraciones de paquete. No use las funciones de jdk1.6 y superior.
Nota: El nombre de la clase principal debe ser: Principal, de lo contrario se tratará como código no válido.

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class 幸运数 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int m = sc.nextInt();
        
        List<Integer> list = new ArrayList<>();
        for(int i=1;i<=m;i++){
            list.add(new Integer(i));
        }
        
        int luck = 2; //幸运数
        int k = 1;  //下标
        List<Integer> remove = new ArrayList<>();  //等待被移除的数字
        while(luck<=list.size()){
            int cnt = 0;//代表list中目前删除了几个数字
            for(int i=luck;i<=list.size();i++){  
                if(i%luck==0){
                    remove.add(i);
                }
            }
            
            
            for(int j=0;j<remove.size();j++){//将下标为remove中的数字移除
                list.remove(remove.get(j)-(cnt++)-1);
            }
            remove.clear();

            luck = list.get(k++);
        }
        int count = 0;
        for(int i=0;i<list.size();i++){
            if(list.get(i)>n&&list.get(i)<m){
                count++;
            }
        }
        System.out.println(count);
    }
}
import java.util.Scanner;  
public class Main {  
    static int G[]=new int [1000*1000+1];
    static int n;
    public static void main(String []args)  
    {  
        Scanner cs = new Scanner(System.in); 
        int m=cs.nextInt();
        n=cs.nextInt();
        //首先从1开始写出自然数1,2,3,4,5,6,....
        for(int i=1;i<=n;i++){
            G[i]=i;
        }
        //从2这个数开始。把所有序号能被2整除的项删除
        f(2);
        int xuhao=2;
        while(G[xuhao]<=pr1()){  //一直取幸运数,幸运数依次是数组中下标为2、3、4、5、6……对应的值
            f(G[xuhao]);
            xuhao++;
        }
        //计算结果
        int answer=0;
        for(int i=1;i<=n;i++){
            if(G[i]>=n)   //当G[i]超出n就不必要再算下去了
                break;
            if(G[i]>m)
                answer++;
        }
        System.out.println(answer);
    }
    static int pr1(){   //计算缩减后数组的长度,为了进一步加快算法的速度,避免每次都遍历整个n长度的数组
        int i=1;
        while(G[i]>0){
            i++;
        }
        return i-1;
    }
    static void f(int xuhao){  //删除对应位置的元素后缩紧
        for(int i=xuhao;i<=n;i+=xuhao){
                G[i]=0;
        }
        int j=1;
        for(int i=1;i<=n;i++){   //把它们缩紧,重新记序
            if(G[i]>0){
                int temp=G[i];
                G[i]=0;
                G[j++]=temp;
            }
        }
    }
}  
44 artículos originales publicados · Me gusta2 · Visitas 540

Supongo que te gusta

Origin blog.csdn.net/qq_43699776/article/details/105442539
Recomendado
Clasificación