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

Golangのアルゴリズム問題での整数分割の実現方法の分析

本文はGolangアルゴリズム問題の整数分割の実装方法について説明しています。皆さんに参考にしていただくために、以下のようにご紹介します:

一个整数总可以拆分为2一つの整数は常に以下のように分割できます}}

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

の累乗の和で表されます。例えば:6異なる分割方法が

さらに、以下のように分割できます:4を以下のように分割できます:4 = 4、4 = 1 + 1 + 1 + 1、4 = 2 + 2、4=1+1+2。

f(n)を使ってnの異なる分割の種類を表現してください。例えば、f(7)=6.

要求: 程序を書き、n(1000000),出力: f(n)

入力: 整数N(1<=N<=1000000)。

出力: f(n)

入力データが範囲外の場合、出力-1。

サンプル入力:

7

サンプル出力:

6

コード実装:

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,1の分割方法
    if n == 1 {
        return 1
    }
    //2=2,2=1+1、2の分割方法
    if n == 2 {
        return 2
    }
    //n>=3
    //既に計算された値を保存します
    data := make([]int, n+1)
    data[0] = 0 //この値は意味がなく、単なる占位符の役割です
    data[1] = 1
    data[2] = 2
    for i := 3; i <= n; i++ {
        if i%2 == 0 {
            //偶数
            data[i] = data[i-2] + data[i/2]
        } else {
            //奇数
            data[i] = data[i-1]
        }
    }
    return data[n]
}

この記事に記載の内容が皆様のGo言語プログラミングに役立つことを願っています。

声明:この記事の内容はインターネットから収集され、著作権者に帰属します。インターネットユーザーが自発的に貢献し、自己でアップロードしました。このサイトは所有権を持ちません。人工編集は行われていません。また、関連する法的責任を負いません。著作権侵害が疑われる内容がある場合は、メールを以下のアドレスに送信してください:notice#oldtoolbag.com(メールを送信する際には、#を@に置き換えてください。届出を行い、関連する証拠を提供してください。一旦確認がつき、このサイトは侵害が疑われる内容をすぐに削除します。)

おすすめ