Восемьдесят два, перфокарта для практики алгоритма Java (три вопроса)

Каталог статей

Тема 1

Описание темы

Эксплуатационные ограничения

отвечать

тема вторая

Описание темы

Эксплуатационные ограничения

отвечать

тема три

Описание темы

введите описание

выходное описание

входная выборка

Пример вывода

Эксплуатационные ограничения

отвечать


 

Тема 1

Описание темы

возрастное совпадение

Этот вопрос заполняет пустые поля.После вычисления результата используйте оператор вывода в коде, чтобы вывести заполненный результат.

Сяо Мин ходил в кино со своим двоюродным братом, и кто-то спросил их возраст. Сяо Мин сказал: «Этот год — наш счастливый год. Четыре цифры года моего рождения в сумме дают ровно мой возраст. Так и у двоюродного брата. Известно, что это 2014 год, и возраст, упомянутый Сяо Мином, относится к годовалому возрасту.

Пожалуйста, сделайте вывод и укажите год рождения Сяо Мина.


Эксплуатационные ограничения

  • Максимальное время работы: 1 с
  • Максимальная оперативная память: 128M

отвечать

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);
		}
	}
}

Примечание: Определяем интервал (1950, 2014), результат 2006, 1988, он мой двоюродный брат, значит 2006 года рождения

Ответ: Я: 1988 г.р. Он: 2006 г.р.

тема вторая

Описание темы

треугольник игральных карт

Этот вопрос заполняет пустые поля.После вычисления результата используйте оператор вывода в коде, чтобы вывести заполненный результат.

A, 2, 3, 4, 5, 6, 7, 8, 9, всего 9 карт расположены в правильном треугольнике (A считается за 1). Сумма каждой стороны должна быть равна. На рисунке ниже представлена ​​аранжировка.

 

Таких договоренностей может быть много.

Если рассматривать вращение и зеркальное отображение (симметрию), одно и то же одно и то же, сколько существует различных схем?

Пожалуйста, рассчитайте и отправьте это число.


Эксплуатационные ограничения

  • Максимальное время работы: 1 с
  • Максимальная оперативная память: 256M

отвечать

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;// 回溯
			}
		}
	}
}

Примечание: поиск dfs, полное расположение и понимание трех элементов являются наиболее важными.

  • Настройки параметров ввода
  • экспорт настроек для dfs
  • Требуется ли откат

Ответ: 144

тема три

Описание темы

игра в мяч

В коробке n шаров. А и В по очереди берут шары из коробки. Каждый может видеть, сколько мячей взял другой и сколько осталось в коробке. Все они умные и не ошибаются суждения.

Мы согласны:

Количество шаров, которые каждый игрок берет из коробки, должно быть: 1, 3, 7 или 8. Ты не можешь воздержаться, когда твоя очередь брать мяч! А сначала берет мяч, а затем поочередно берет мяч, пока тот не закончится. Сторона, вынужденная получить последний мяч, является проигравшей (проигравшая сторона).

Пожалуйста, запрограммируйте, чтобы определить, может ли А выиграть с заданным начальным числом шаров так, чтобы ни одна из сторон не ошиблась?


введите описание

Первым является целое число n (n<100), что означает, что следующие n целых чисел.

Затем есть n целых чисел, каждое в строке (целое число < 10^4), представляющее начальное количество шаров.

выходное описание

Затем программа выводит n строк, указывающих, выигрывает или проигрывает А (0 — проигрыш, 1 — выигрыш).

входная выборка

4
1
2
10
18

Пример вывода

0
1
1
0

Эксплуатационные ограничения

  • Максимальное время работы: 1 с
  • Максимальная оперативная память: 256M

отвечать

(насильственное решение)

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;
	}
}

(дп решить)

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]);
		}
	}
}

Насильственное решение: избыточный код, высокая частота повторения, громоздкость и громоздкость

решение dp: есть только два результата, он выигрывает или я выигрываю, отношения между правильным и неправильным, используйте «||» для выбора четырех методов, что означает, что пока есть один метод для победы, тогда я выиграю в конец, а метод является оптимальным значением.

например: 4 мяча

1, 1, 1, 1 (я проиграл)

3, 1 (я выиграл)

Просматривайте результаты вычислений и накапливайте их


 

рекомендация

отblog.csdn.net/m0_54925305/article/details/123565978
рекомендация