Ochenta y dos, tarjeta perforada de práctica del algoritmo Java (tres preguntas)

Directorio de artículos

Tema 1

Tema Descripción

Restricciones operativas

responder

tema dos

Tema Descripción

Restricciones operativas

responder

tema tres

Tema Descripción

ingrese la descripción

descripción de salida

muestra de entrada

Salida de muestra

Restricciones operativas

responder


 

Tema 1

Tema Descripción

coincidencia de edad

Esta pregunta es una pregunta para completar los espacios en blanco. Después de calcular el resultado, use la declaración de salida en el código para generar el resultado completo.

Xiao Ming fue al cine con su primo y alguien les preguntó su edad. Xiao Ming dijo: Este año es nuestro año de suerte. Los cuatro dígitos de mi año de nacimiento suman exactamente mi edad. También lo es el del primo. Se sabe que este año es 2014 y la edad mencionada por Xiao Ming se refiere a un año.

Infiere y completa el año de nacimiento de Xiao Ming.


Restricciones operativas

  • Tiempo máximo de ejecución: 1s
  • Memoria máxima en ejecución: 128M

responder

public class Main {
	public static void main(String[] args) {
		for (int i = 2014; i > 1950; i--) {
			if ((2014 - i) == (i % 10 + (i / 10) % 10 + (i / 100) % 10 + (i / 1000) % 10))
				System.out.println(i);
		}
	}
}

Nota: determine el intervalo (1950, 2014), el resultado es 2006, 1988, es mi primo, entonces nació en 2006

Respuesta: Yo: 1988 Él: 2006

tema dos

Tema Descripción

triangulo de naipes

Esta pregunta es una pregunta para completar los espacios en blanco. Después de calcular el resultado, use la declaración de salida en el código para generar el resultado completo.

A, 2, 3, 4, 5, 6, 7, 8, 9, un total de 9 cartas están dispuestas en un triángulo regular (A se cuenta como 1). Se requiere que la suma de cada lado sea igual. La siguiente figura es un arreglo.

 

Puede haber muchos arreglos de este tipo.

Si considerando la rotación y la imagen especular (simetría), el mismo es el mismo, ¿cuántos arreglos diferentes hay?

Calcule y envíe este número.


Restricciones operativas

  • Tiempo máximo de ejecución: 1s
  • Memoria máxima en ejecución: 256M

responder

public class Main {
	static int ans = 0;
	static int[] A = new int[9];// 用来存数据
	static int[] B = new int[9];// 用来表示该数组的位置是否有被遍历过

	public static void main(String[] args) {
		dfs(0);

		// 因为旋转和镜像代表的是同一种,但是它们各重复三次,即重复六次,所以最后要除以六
		System.out.println(ans / 6);
	}

	public static void dfs(int num) {
		if (num == 9 && ((A[0] + A[1] + A[2] + A[3]) == (A[3] + A[4] + A[5] + A[6]))
				&& ((A[3] + A[4] + A[5] + A[6]) == (A[6] + A[7] + A[8] + A[0]))) {
			ans++;
			return;
		}
		for (int i = 0; i < 9; i++) {
			if (B[i] == 0) {
				A[num] = i + 1;// 对数组进行赋值
				B[i] = 1;// 表示该位置已经赋值
				dfs(num + 1);
				B[i] = 0;// 回溯
			}
		}
	}
}

Nota: la búsqueda de dfs, la disposición completa y la comprensión de los tres elementos son los más críticos

  • Ajustes de parámetros de entrada
  • configuración de exportación para dfs
  • Si se requiere retroceder

Respuesta: 144

tema tres

Tema Descripción

juego de pelota

Hay n bolas en la caja. A y B se turnan para sacar bolas de la caja. Cada uno puede ver cuántas bolas ha cogido el otro y cuántas quedan en la caja. Todos son inteligentes y no se equivocan. juicios

Estamos de acuerdo:

El número de bolas que cada persona saca de la caja debe ser: 1, 3, 7 u 8. ¡No puedes abstenerte cuando te toca tomar la pelota! A toma la pelota primero y luego toma la pelota alternativamente hasta que termina. El lado obligado a recibir la última bola es el perdedor (lado perdedor)

Por favor programe para determinar si A puede ganar para un número inicial dado de bolas sin que ninguna de las partes se equivoque.


ingrese la descripción

El primero es un número entero n (n<100), lo que significa que hay n números enteros a continuación.

Entonces hay n enteros, cada uno en una línea (entero < 10^4), que representan el número inicial de bolas.

descripción de salida

Luego, el programa genera n líneas, lo que indica si A gana o pierde (0 para perder, 1 para ganar).

muestra de entrada

4
1
2
10
18

Salida de muestra

0
1
1
0

Restricciones operativas

  • Tiempo máximo de ejecución: 1s
  • Memoria máxima en ejecución: 256M

responder

(solución violenta)

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

//类似于爬楼梯的递归模式
public class Main {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int n = scanner.nextInt();
		List<Integer> l = new ArrayList<>();
		for (int i = 0; i < n; i++) {
			l.add(scanner.nextInt());
		}
		for (int j = 0; j < n; j++) {
			if (A(l.get(j))) {
				System.out.println(1);
			} else {
				System.out.println(0);
			}
		}
	}

	public static boolean A(int m) {
		if (m >= 1) {
			switch (m) {
			case 1:
				return false;// 当你要去拿球时,并且最后只剩下1个球时,输
			case 3:
				return false;// 当你要去拿球时,并且最后只剩下3个球时,输
			case 7:
				return false;// 输
			case 8:
				return true;// 赢
			default:
				return (!A(m - 1) || !A(m - 3) || !A(m - 7) || !A(m - 8));// 这个时候表示自己拿1或3或7或8个球,然后这时对象变成了对面的一个人,所以要加!
			}
		}
		return false;
	}
}

(dp resolver)

import java.util.Scanner;

//dp解法
public class Main {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int n = scanner.nextInt();
		boolean[] A = new boolean[10009];// 因为n<10^4
		A[0] = true;
		for (int i = 1; i < 10009; i++) {
			A[i] = (!(A[i - 1]) || (i >= 3 && !A[i - 3]) || (i >= 7 && !A[i - 7]) || (i >= 8 && !A[i - 8]));// 这个时候表示自己拿1或3或7或8个球,然后这时对象变成了对面的一个人,所以要加!
		}
		// 为了方便输出
		int[] B = new int[n + 1];
		for (int i = 1; i <= n; i++) {
			int j = scanner.nextInt();
			if (!A[j]) {
				B[i] = 0;
			} else {
				B[i] = 1;
			}
		}
		for (int k = 1; k <= n; k++) {
			System.out.println(B[k]);
		}
	}
}

Solución violenta: código redundante, alta tasa de repetición, engorroso y engorroso

solución dp: solo hay dos resultados, él gana o yo gano, la relación entre el bien y el mal, use "||" para elegir cuatro métodos, lo que significa que mientras haya un método para ganar, ganaré en el final, y el método es el valor óptimo.

por ejemplo: 4 bolas

1, 1, 1, 1 (perdí)

3, 1 (gané)

Recorrer los resultados de los cálculos y acumularlos


 

Supongo que te gusta

Origin blog.csdn.net/m0_54925305/article/details/123565978
Recomendado
Clasificación