Go 语言解面试题1
来源:互联网 发布:单页面淘宝客 编辑:程序博客网 时间:2024/06/08 14:53
/* 比较一下
:http://blog.csdn.net/iilovetopview/article/details/43745059
go的运算效率逊于D(LDC 编译器0.15.1(LLVM3.6 ,MSVC64))。
用“数学公式”法解下题:
有一个整数n,写一个函数f(n),返回0到n之间出现的"1"的个数。
比如f(13)=6,现在f(1)=1,问下一个最大的f(n)=n的n是什么?
*/
package mainimport ("fmt""time""math") var aa map[int]intvar Ac []intfunc main() {fmt.Println("(go Language) Please wait for some minutes,will found Next Fn(n) = n ,the n is:")n := 1count :=0pos := 0t :=time.Now()for n =1;n<200000;n++ {aa = make(map[int]int) Ac = make([]int,10)pos = Fn(n) if n == pos {count++fmt.Println("n is :",n," Fn(n) is :",pos)if(count >1) {break}}}fmt.Println("time is :",time.Now().Sub(t).String())fmt.Println(n," stop")fmt.Println("test 199981 is :",Fn_test(199981))} func Fn(n int) int {i:=0y:=0for x :=n;x>=1;x/=10 {y=x%10aa[i] =yAc[i] =yi++}Ac = Ac[0:i] //关键m := len(Ac)-1h :=aa[m]if( n%gPow(m) == 0) {return fnA(h,m)}else{ return fnA(h,m)+fnB(m-1)}}func fnA(h int,m int) int {if(h == 0){return 0}else if h==1 {if(m == 0) {return 1} else{ return m*gPow(m-1)+1}}else {if(m == 0) {return 1} else{ return gPow(m)+h*m*gPow(m-1)}}} func fnB(m int) int { ..... //代码略return sum + fnB(m-1)}func gPow(m int) int {return int(math.Pow10(m)) }/*------------测试-------------*/func Fn_test(n int) int { total:= 0for i:=0;i<=n;i++ {total += Count(i)}return total}func Count(n int) int {num:=0for t:= n;t >=1;t=t/10 {if(t%10 == 1) {num++}}return num}
0 0
- Go 语言解面试题1
- 用D语言解面试题1
- Rust语言解面试题1
- C语言面试题1
- c语言面试题1
- c语言面试题1
- C语言面试题1
- C语言面试题1
- c语言面试题1
- 用D语言解面试题2
- 用D语言解面试题3
- 用D语言解面试题4
- 用D语言解面试题5
- 用D语言解面试题6
- 面试题1-- C语言1
- 面试题1-- C语言2
- 面试题1-- C语言3
- 面试题1-- C语言4
- get\set用来访问类的属性。
- IEnumerable和IEnumerator 详解
- 详解C# 迭代器
- Coroutines in Unity3d (C# version)----在unity3D中的协同(基于C#)
- C#之旅(二): IEnumerable IEnumerator
- Go 语言解面试题1
- hdoj1251统计问题
- Leetcode: Spiral Matrix
- 移动端开发心得(2015.3.1更新)
- poj 3469 Dual Core CPU(最小割)
- Ubuntu下搭建tftp服务器最简单方法 (整理转载)
- Symmetric Tree - Leetcode
- Pass-by-reference in C++ and java
- 浙大机试2008:魔咒词典