golang经典编程题30题(带答案)golang基础算法30题

这是一篇关于Golang编程的挑战文章,涵盖了30道算法题目,包括九九乘法表计时、最大公约数与最小公倍数计算、回文数判断、水仙花数、同构数、质数查找、员工涨薪计算、Map操作、约瑟夫环问题、斐波那契数列等,旨在提升Golang基础算法能力。
摘要由CSDN通过智能技术生成

1.打印出九九乘法表并统计耗时

package main

import (
	"fmt"
	"time"
)

func main() {
   
	start := time.Now()
	var i, j int
	for i = 1; i <= 9; i++ {
   
		for j = 1; j <= i; j++ {
   
			fmt.Printf("%d*%d=%d\t", i, j, i*j)
		}
		fmt.Println()
	}
	tc := time.Since(start)
	fmt.Printf("耗时是%v", tc)
}

2.求两个数的求最大公约数和最小公倍数。

package main

import "fmt"

func getMaximumCommonDivisor(a, b int) int {
   
	//获取最大公约数

	for a != b {
   
		if a > b {
   
			a = a - b
		} else if a < b {
   
			b = b - a
		}
	}

	return a

}
func main() {
   
	var a, b = 24, 10
	num := getMaximumCommonDivisor(a, b)
	fmt.Println("a,b的最大公约数是:", num)
	//求最小公倍数相对来说就比较简单了。只需要先求出最大公约数。用两个数的乘积除以最大公约数即可
	fmt.Println("a,b的最小公倍数是:", a*b/num)
}
//结果:
//a,b的最大公约数是: 2
//a,b的最小公倍数是: 120


3.回文数的判断
回文数的概念:即是给定一个数,这个数顺读和逆读都是一样的。例如:121,1221是回文数,123,1231不是回文数。


package main

import (
	"fmt"
)

func isHuiwen(a string) bool {
   
	var i, j int
	var b bool
	for i = 0; i <= len(a)/2-1; i++ {
   
		j = len(a) - 1
		if a[i] != a[j] {
   
			b = false
		}
		b = true
		j--
	}
	return b
}
func main() {
   
	a := "1002332001"
	isHuiwen(a)
	fmt.Println(isHuiwen(a))
}

4.求水仙花数
水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身(例如:1^3 + 5^3+ 3^3 = 153)

package main

import (
	"fmt"
)

func isNarcissisticNum(num int) bool {
   
	a := num / 100       //分离出百位a
	b := (num / 10) % 10 //分离处十位b
	c := num % 10        //分离出个位c
	result := a*a*a + b*b*b + c*c*c
	if num == result {
   
		return true
	}
	return false
}
func main() {
   
	for i := 100; i < 1000; i++ {
   
		if isNarcissisticNum(i) {
   
			fmt.Println("水仙花数有:", i)
		}
	}
}
//结果:
//水仙花数有: 153
//水仙花数有: 370
//水仙花数有: 371
//水仙花数有: 407

5.求1-10000之间的同构数
正整数n若是它平方数的尾部,则称n为同构数。
例如:5的平方数是25,且5出现在25的右侧,那么5就是一个同构数。

package main

import "fmt"

func main() {
   
	var i, j, k int
	k = 10
	for i = 1; i <= 10000; i++ {
   
		if i == k {
   
			k *= 10
		}
		j = i * i
		if j%k == i {
   
			fmt.Printf("%d是同构数, %d的平方是%d\n", i, i, j)
		}
	}
}

//结果:
//1是同构数, 1的平方是1
//5是同构数, 5的平方是25
//6是同构数, 6的平方是36
//25是同构数, 25的平方是625
//76是同构数, 76的平方是5776
//376是同构数, 376的平方是141376
//625是同构数, 625的平方是390625
//9376是同构数, 9376的平方是87909376

6.编写一个函数,求100以内的质数
质数又称素数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数;否则称为合数

package main

import (
	"fmt"
	"math"
)

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

		}
	}
	return true
}
func main() {
   
	var str []int//存放质数
	j := 0
	for i := 2; i < 100; i++ {
   
		if isPrime(i) {
   
			str = append(str, i)
			j++
		}
	}
	fmt.Println(str)
}
//结果
//[2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97]

7.分析以下需求,并用代码实现:
(1)根据工龄(整数)给员工涨工资(整数),工龄和基本工资通过键盘录入
(2)涨工资的条件如下:
[10-15) +5000
[5-10) +2500
[3~5) +1000
[1~3) +500
[0~1) +200
(3)如果用户输入的工龄为10,基本工资为3000,程序运行后打印格式"您目前工作了10年,基本工资为 3000元,
应涨工资 5000元,涨后工资 8000元"


package main

import "fmt"

func main() {
   
	var n, salary, sum, a int
	var err error

	fmt.Println("请输入您的工龄")
	_, err = fmt.Scanln(&n)
	if err != nil {
   
		fmt.Println(err)
	}
	fmt.Println("请输入您的基本工资")
	_, err = fmt.Scanln(&salary)
	if err != nil {
   
		fmt.Println(err)
	}
	if n >= 0 && n < 1 {
   
		a = 200
	} else if n >= 1 && n < 3 {
   
		a = 500
	} else if n >= 3 && n < 5 {
   
		a = 1000
	} else if n >= 5 && n < 10 {
   
		a = 2500
	} else if n >= 10 && n < 15 {
   
		a = 5000
	}
	sum = salary + a
	fmt.Printf("您目前工作了%d年,基本工资为%d元,应涨工资%d元,涨后工资%d元", 
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值