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)
}