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

Análisis del método de implementación de la división de enteros en problemas de algoritmos de Golang

Este artículo ejemplifica la implementación del problema de división de enteros en el lenguaje de programación Golang. Lo compartimos con todos para referencia, como se detalla a continuación:

Un entero siempre se puede dividir en2es

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

En total, la suma de los potencias de6maneras diferentes de dividir.

Por ejemplo:4puede dividirse en:4 = 4,4 = 1 + 1 + 1 + 1,4 = 2 + 2,4=1+1+2。

usar f(n) para representar el número de diferentes formas de dividir n, por ejemplo, f(7)=6.

Se requiere escribir un programa para leer n (no superior a1000000),salida f(n)

Entrada: un entero N(1<=N<=1000000).

Salida: f(n)

Si los datos de entrada están fuera de rango, la salida es-1。

Entrada de ejemplo:

7

Salida de ejemplo:

6

Implementación del código:

paquete 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,1maneras de dividir
    if n == 1 {
        return 1
    }
    //2=2,2=1+1,2maneras de dividir
    if n == 2 {
        return 2
    }
    //n>=3
    //Guardar los valores calculados anteriormente
    data := make([]int, n+1)
    data[0] = 0 //Este valor no tiene significado, solo actúa como un marcador de posición
    data[1] = 1
    data[2] = 2
    for i := 3; i <= n; i++ {
        if i%2 == 0 {
            //número par
            data[i] = data[i-2] + data[i/2]
        } else {
            //número impar
            data[i] = data[i-1]
        }
    }
    return data[n]
}

Espero que lo descrito en este artículo pueda ayudar a todos en la programación de lenguajes Go.

Declaración: el contenido de este artículo se obtiene de la red, es propiedad del autor original, el contenido se contribuye y carga de manera autónoma por los usuarios de Internet, este sitio no posee los derechos de propiedad, no se ha procesado editorialmente y no asume ninguna responsabilidad legal. Si encuentra contenido sospechoso de infracción de derechos de autor, por favor envíe un correo electrónico a: notice#oldtoolbag.com (al enviar un correo electrónico, reemplace # con @ para denunciar y proporcione evidencia. Una vez confirmado, este sitio eliminará inmediatamente el contenido sospechoso de infracción de derechos de autor.)

Te gustará