English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Análise do método de quebra de inteiros em problemas de algoritmos do Golang

Este exemplo descreve a implementação do problema de divisão de inteiros em Golang. Partilho com vocês para referência, conforme detalhado a seguir:

Um inteiro pode ser dividido em2da potência, por exemplo:

7=1+2+4
7=1+2+2+2
7=1+1+1+4
7=1+1+1+2+2
7=1+1+1+1+1+2
7=1+1+1+1+1+1+1

maneiras diferentes de dividir6Existem

Por exemplo:4pode ser dividido em:4 = 4,4 = 1 + 1 + 1 + 1,4 = 2 + 2,4=1+1+2。

Usar f(n) para representar o número de maneiras diferentes de dividir n, por exemplo, f(7)=6.

Requisito: Escreva um programa para ler n (não exceder1000000),saída f(n)

Entrada: um inteiro N(1<=N<=1000000).

Saída: f(n)

Se os dados de entrada estiverem fora do intervalo, a saída será-1。

Entrada de exemplo:

7

Saída de exemplo:

6

Implementação do código:

package huawei
import (
    "fmt"
)
func Test08Base() {
    input := 1000000
    output := numberSplit(input)
    fmt.Println(output)
}
func numberSplit(n int) int {
    if n < 1 || n > 1000000 {
        return -1
    }
    //1=1,1modo de divisão
    if n == 1 {
        return 1
    }
    //2=2,2=1+1,2modo de divisão
    if n == 2 {
        return 2
    }
    //n>=3
    //Salvar os valores calculados
    data := make([]int, n+1)
    data[0] = 0 //Este valor não tem significado e serve apenas como marcador de posição
    data[1] = 1
    data[2] = 2
    for i := 3; i <= n; i++ {
        if i%2 == 0 {
            //par
            data[i] = data[i-2] + data[i/2]
        } else {
            //ímpar
            data[i] = data[i-1]
        }
    }
    return data[n]
}

Espero que o conteúdo deste artigo ajude a todos a programar em Go.

Declaração: o conteúdo deste artigo é extraído da Internet, pertence ao respectivo proprietário dos direitos autorais, o conteúdo é contribuído e carregado voluntariamente pelos usuários da Internet, o site não possui direitos de propriedade, não foi editado manualmente e não assume responsabilidades legais relacionadas. Se você encontrar conteúdo suspeito de violação de direitos autorais, por favor, envie e-mail para: notice#oldtoolbag.com (ao enviar e-mail, substitua # por @ para denunciar e forneça provas. Se confirmado, o site deletará imediatamente o conteúdo suspeito de violação de direitos autorais.)

Você também pode gostar