golang 算法一 数学

1、golang会自动进行四设五入

func main(){
	var a float32
	fmt.Scan(&a)
	fmt.Printf("%.2f",a)
}
//输入:1.235
//结果:1.24

2、火柴游戏,21根火柴,轮流取,每人可取1-4根,不可多取,也不可不取,编程,让一个人赢得比赛。

每轮让两个人去火柴的数量为5。

3、求圆周率

=1-1/3+1/5-1/7+.........

func main(){
	var res,b float64
	res = 1
	a :=1
	b = 1/float64(a)
	for b > 1e-6 {
		a += 2
		b = 1/float64(a)
		if a/2%2 == 0 {
			res += b
		}else {
			res -= b
		}
	}
	fmt.Println(res*4)
}
//结果:3.1415946535856922

4、求最大公约数和最小公倍数。

最小公倍数 = 初始值a * 初始值b/最大公约数

最大公约数 :用辗转相除法进行计算。(a,b)--(b,a/b)-------------------------

func main(){
	var a,b,c int
	fmt.Scan(&a,&b)
	tempA := a
	tempB := b
	for b != 0 {
		c = a % b
		a = b
		b = c
	}
	fmt.Println("最大公约数为:",a)
	fmt.Println("最小公倍数为:",tempA*tempB/a)
}
//结果
//24 10
//最大公约数为: 2
//最小公倍数为: 120

5、求2-10000之间的同构数,数值平方后的奇妙现象。

func main(){
	var i,j,k int
	k = 10
	for i=2;i<=10000;i++ {
		if i==k {
			k *=10
		}
		j = i*i
		if j%k == i {
			fmt.Printf("i:%d, j:%d\n",i,j)
		}
	}
}
/*结果
i:5, j:25
i:6, j:36
i:25, j:625
i:76, j:5776
i:376, j:141376
i:625, j:390625
i:9376, j:87909376*/

6、求e的近似值 e=1 + 1/1! + 1/2! + 1/3! + ... 

func main(){
	var i,t int64
	i = 1
	t = 1
	ans := float64(1)
	for 1/float64(t) >= 1e-6 {
		i++
		t=t*i
		ans += 1/float64(t)
	}
	fmt.Println(ans)
}
/*结果
1.7182818011463847
*/

7、斐波那契数列:兔子永生

现有一对兔子,兔子两个月后,就有繁殖能力,那么40个月后可以繁殖多少对兔子。

f(n) =  f(n-1) + f(n-2)

func main(){
	var n,f2 int
	f0 := 1
	f1 := 1

	fmt.Scan(&n)

	for i:=2;i<=n;i++ {
		f2 = f0 + f1
		f0 = f1
		f1= f2
	}
	if n <= 1 {
		fmt.Println(1)
	}else{
		fmt.Println(f2)
	}
}

8、求分子序列和

func main(){
	var ans float64
	a := 1
	b := 2
	for i:=0;i<20;i++ {
		ans += float64(b)/float64(a)
		c:= a
		a = b
		b = c+b
 	}
 	fmt.Println(ans)
}

9、求素数,普通方法 + 筛选法

方法一:

func prime(i int) bool {
	for j:=2;float64(j)<= math.Sqrt(float64(i));j++ {
		if i%j == 0 {
			return false
			break
		}
	}
	return true
}


func main(){
	var str []int
	j := 0
	for i:=2;i<100;i++ {
		if prime(i) {
			str = append(str,i)
			j++
		}
	}
	fmt.Println(str)
}
方法二:筛选法
func prime(i int) bool {
	for j:=2;float64(j)< math.Sqrt(float64(i));j++ {
		if i%j == 0 {
			return false
			break
		}
	}
	return true
}


func main(){
	n := 100
	var str []int     //存素数
	var flag [100]bool //筛选素数

	for i:=3;i<n;i+=2 {//偶数不管
		if flag[i] == false {
			if prime(i) {
				str = append(str,i)
				for k:=2;i*k<n;k++ { //此素数的倍数一定不是素数
					flag[i*k] = true
				}
			}
		}
	}
	fmt.Println(str)
}
/*结果
[3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97]
*/

10、圆内小方块数

func main(){
	l := 1         //圆内小方块长度
	var r float64  //圆半径
	fmt.Scan(&r)

	ans := 0
	for i:=1;i<int(r);i++ { //1/4圆中的第i组
		ans += int(math.Sqrt(r*r-float64((l*i)*(l*i))))
	}
	fmt.Println(4*ans)
}

11、自幂数(水仙花是三位的自幂数)

func main(){
	for n:=10;n<10000;n++{
		ans := 0
		temp := n
		len := 0             //记录n的位数
		for temp/10!=0 || temp%10!=0 {
			temp/=10
			len ++
		}
		t := n
		for t!=0 {
			te := t%10
			ans += int(math.Pow(float64(te),float64(len)))
			t = t/10
		}
		if ans == n {
			fmt.Println(ans)
		}
	}
}
/*结果
153
370
371
407
1634
8208
9474
*/

12、猴子吃桃子

猴子第一天摘了若干个桃子,当即吃了一半,还不解馋,又多吃了一个;第二天,吃剩下的桃子的一半,还不过瘾,又多吃了一个;以后每天都吃前一天剩下的一半多一个,到第10天想再吃时,只剩下一个桃子了。问第一天共摘了多少个桃子?

递归:

func f(n int) int{
	if n == 1 {
		return 1
	} else {
		return 2*f(n-1)+2
	}
}

func main(){
	fmt.Println(f(10))
}

递推:

func main(){
	ans := 1
	for i:=9;i>=1;i-- {
		ans = ans*2+2
	}
	fmt.Println(ans)
}
/*结果
1534
*/
13、出售金鱼 

买卖提将养的一缸金鱼分五次出售系统上一次卖出全部的一半加二分之一条;第二次卖出余下的三分之一加三分之一条;第三次卖出余下的四分之一加四分之一条;第四次卖出余下的五分之一加五分之一条;最后卖出余下的11条。问原来的鱼缸中共有几条金鱼?

func main(){
	res := 11
	for j:=4;j>=1;j-- {
		res = (res*(j+1)+1)/j
	}
	fmt.Println(res)
}
  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值