English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
本文は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(メールを送信する際には、#を@に置き換えてください。届出を行い、関連する証拠を提供してください。一旦確認がつき、このサイトは侵害が疑われる内容をすぐに削除します。)