problema algoritmo de hoje

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:

  1. 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.
  2. 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:

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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;
    }

}

Acho que você gosta

Origin www.cnblogs.com/syhyfh/p/12500019.html
Recomendado
Clasificación