发布于 2017-03-16 21:27:52 | 81 次阅读 | 评论: 0 | 来源: 网友投递

这里有新鲜出炉的GO语言教程,程序狗速度看过来!

Go语言

Go是一种新的语言,一种并发的、带垃圾回收的、快速编译的语言。Go是谷歌2009年发布的第二款编程语言。2009年7月份,谷歌曾发布了Simple语言,它是用来开发Android应用的一种BASIC语言。


这篇文章主要介绍了Golang算法问题之整数拆分实现方法,结合实例形式分析了Go语言数值运算与数组遍历相关操作技巧,需要的朋友可以参考下

本文实例讲述了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语言程序设计有所帮助。



相关阅读 :
Golang算法问题之整数拆分实现方法分析
Golang排列组合算法问题之全排列实现方法
Golang算法问题之数组按指定规则排序的方法分析
Golang算法之田忌赛马问题实现方法分析
Golang中数据结构Queue的实现方法详解
Golang正整数指定规则排序算法问题分析
golang之tcp自动重连实现方法
Go语言服务器开发之简易TCP客户端与服务端实现方法
Golang最大递减数算法问题分析
Golang中Set类型的实现方法示例详解
Golang中List的实现方法示例详解
golang time包下定时器的实现方法
最新网友评论  共有(0)条评论 发布评论 返回顶部

Copyright © 2007-2017 PHPERZ.COM All Rights Reserved   冀ICP备14009818号  版权声明  广告服务