anuário
um tópico: multiplicação de matrizes
Descrição do problema:
Dado um N-ésima ordem matrizes A, A, M potência de saída (número inteiro M não negativo) (limite de tempo: 1.0s, limite de memória: 512.0MB,)
, por exemplo:
A =
. 1 2
. 3. 4
2 A de alimentação
. 7 10
15 22
Entrada e saída formato:
A primeira linha é um número inteiro positivo de N, M (1 <= N <= 30, 0 <= M <= 5), e representa uma potência da ordem dos requisitos de matriz a.
Próximo N linhas, cada linha do valor absoluto N é não mais do que 10 número inteiro não negativo, o valor da matriz A é descrito.
Total n linhas de saída inteiros N, M representa o poder da matriz A que corresponde ao. Separados por um espaço entre os números adjacentes.
solução:
1. Escrever função de multiplicação duas matriz pode então executar uma série correspondente de momentos.
2. Note que o poder da matriz 0 é a matriz identidade.
código de resolução:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt(); // 阶数
int m = sc.nextInt(); // 幂数
int[][] arr1 = new int[n][n];
for(int i = 0; i < n; i++) {
for(int j = 0; j < n; j++) {
arr1[i][j] = sc.nextInt();
}
}
if(m == 0){
for(int i = 0; i < n;i++){
for(int j = 0; j < n;j++){
if(i == j)
System.out.print(1 + " ");
else
System.out.print(0 + " ");
}
System.out.println();
}
System.exit(0);
}
int[][] arr2 = arr1;
for(int i = 1; i < m; i++) {
arr2 = multiply(arr1, arr2);
}
for(int i = 0; i < n; i++) {
for(int j = 0; j < n; j++) {
System.out.print(arr2[i][j] + " ");
}
System.out.println();
}
}
/**
* 两矩阵相乘
* @param a
* @param b
* @return
*/
private static int[][] multiply(int[][] a, int[][] b) {
int length = a.length;
int[][] res = new int[length][length];
for(int i = 0; i < length; i++) {
for (int j = 0; j < length; j++) {
for (int k = 0; k < length; k++) {
res[i][j] += a[i][k] * b[k][j]; // 通过构建i行j列的矩阵即可推出该公式
}
}
}
return res;
}
}
Tópico Dois: factorial
Descrição do problema:
Insira um inteiro positivo n, a saída n valor!. (Prazo: 1.0s, limite de memória: 512.0MB)
.! Em que 1 = n- 2 . 3 ... n-
Entrada e saída formato:
A entrada contém um número inteiro positivo n, n <= 1000.
Saída n! Valor exato.
solução:
BigInteger classe para uso.
código de resolução:
import java.math.BigInteger;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
BigInteger bg = new BigInteger("1");
for(int i = 1; i <= n; i++){
String s = String.valueOf(i);
bg = (new BigInteger(s)).multiply(bg);
}
System.out.println(bg);
}
}
Título III: víbora precisão
Descrição do problema:
Entrada dois inteiros a e b, e saídas dos dois inteiros. a e b são não mais do que 100. (Prazo: 1.0s, limite de memória: 512.0MB)
Entrada e saída formato:
De entrada é constituído por duas linhas, uma primeira conduta de um não-negativos número inteiro um, o comportamento de um segundo número inteiro não negativo b. Dois inteiros não mais do que 100, o número mais elevado de dois bits não é zero.
linha de saída, representa o valor de a + b.
solução:
BigInteger classe para uso.
código de resolução:
import java.math.BigInteger;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s1 = sc.next();
String s2 = sc.next();
BigInteger bg1 = new BigInteger(s1);
BigInteger bg2 = new BigInteger(s2);
System.out.println(bg1.add(bg2));
}
}
Tópico quatro: árvore Huffuman
Descrição do problema:
árvore Huffman tem sido amplamente utilizada na codificação. Aqui, nós só se preocupam com o Huffman árvore processo de construção. (Prazo: 1.0s, limite de memória: 512.0MB)
dá um número de {pi} = {p0, p1 , ..., pn-1}, o número de colunas com a qual o Huffman árvore de configuração processo da seguinte forma:
- Encontrar as duas menores números {pi}, conjunto PA e PB, PA e PB ser removido a partir do {pi}, e, em seguida, adicionados a eles e a {pi}. O custo deste processo é referido como pa + pb.
- Repita o passo 1 até {pi} em apenas alguns.
Durante a operação acima, todas as acusações são adicionados para obter o custo total de construção da árvore Huffman.
As tarefas de título: para um determinado número de colunas, você pode agora encontrar a estrutura de custo total com o número de colunas Huffman árvore.
Por exemplo, o número de colunas {pi} = {5, 3, 8, 2, 9}, Huffman processo de construção da árvore é como se segue:
- Encontrado {5, 3, 8, 2, 9} no número mínimo de dois, ou seja, 2 e 3, excluí-los do PI {e} e 5 para dar ido {5, 8, 9, 5}, o custo 5.
- Encontrado {5, 8, 9, 5} no mínimo de dois números, 5 e 5, respectivamente, retirá-los do {e} e 10 PI foi adicionado, para se obter {8, 9, 10}, o custo de 10.
- Encontrado {8, 9, 10} mínimo dois números, respectivamente, 8 e 9, e 17 e removê-los do PI adicionado {} para dar {10, 17}, o custo de 17.
- Encontrado {10, 17} mínimo dois números, respectivamente 10 e 17, excluí-los do PI {27} são adicionados e a soma, {27} para se obter um custo de 27.
- Agora, só o número de colunas em um número de 27, a fim do processo de construção, um custo total de 10 + 5 + 17 + 27 = 59.
Entrada e saída formato:
A primeira linha de entrada contém um número inteiro positivo n (n <= 100).
Em seguida é um inteiro positivo n, denota p0, p1, ..., £ N 1, o número de não mais do que 1000.
O custo total destas saídas com o número de construção Huffman árvore.
solução:
Seguido por ArrayList armazenar estes valores, valores calculados e listas o mínimo destes dois valores fora das duas listas e lista e lojas.
código de resolução:
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
ArrayList<Integer> arr = new ArrayList();
for(int i = 0; i < n; i++) {
arr.add(sc.nextInt());
}
int sum = 0;
while(n > 1) {
sum += min(arr);
n--;
}
System.out.println(sum);
}
/**
* 求一个数组中最小两个数的和
* @param a
* @return
*/
private static int min(ArrayList<Integer> a) {
Collections.sort(a);
int sum = 0;
for(int i = 0; i < 2; i++) {
sum += a.get(i);
}
a.remove(0);
a.remove(0);
a.add(sum);
return sum;
}
}