go基础知识(三)基础实例
一:打印乘法口诀表
package main
import "fmt"
func main() {
for i :=1; i <= 9; i++ { //外层循环9次
for j :=1; j <=i; j++ { //内层循环到外层的当前值
fmt.Printf("%d × %d = %d ",j,i,(i*j))
}
fmt.Println("") //换行
}
} 执行结果:1 × 1 = 1 1 × 2 = 2 2 × 2 = 4 1 × 3 = 3 2 × 3 = 6 3 × 3 = 9 1 × 4 = 4 2 × 4 = 8 3 × 4 = 12 4 × 4 = 16 1 × 5 = 5 2 × 5 = 10 3 × 5 = 15 4 × 5 = 20 5 × 5 = 25 1 × 6 = 6 2 × 6 = 12 3 × 6 = 18 4 × 6 = 24 5 × 6 = 30 6 × 6 = 36 1 × 7 = 7 2 × 7 = 14 3 × 7 = 21 4 × 7 = 28 5 × 7 = 35 6 × 7 = 42 7 × 7 = 49 1 × 8 = 8 2 × 8 = 16 3 × 8 = 24 4 × 8 = 32 5 × 8 = 40 6 × 8 = 48 7 × 8 = 56 8 × 8 = 64 1 × 9 = 9 2 × 9 = 18 3 × 9 = 27 4 × 9 = 36 5 × 9 = 45 6 × 9 = 54 7 × 9 = 63 8 × 9 = 72 9 × 9 = 81
二:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
package main
import "fmt"
func main() {
nums := [...]int{1,2,3,4} //数组
var count int = 0
//三位组合对比
for _, i := range nums {
for _, j := range nums {
for _, k := range nums {
if i != j && i != k && k != j{
fmt.Printf("%d%d%d;",i,j,k) //打印不重复的组合数
count++ //总数
}
}
}
}
fmt.Println("\n 一共有 ",count,"个不重复的组合")
} 执行结果:123;124;132;134;142;143;213;214;231;234;241;243;312;314;321;324;341;342;412;413;421;423;431;432; 一共有 24 个不重复的组合
三:冒泡法:
package main
import "fmt"
func main() {
var nums = []int{20,1,3,2,5,4,7,9,8,6,21,100}
var listStr = sort(nums)
for _, key := range listStr{
fmt.Println(key)
}
}
//排序从大到小
func sort(data []int) []int{
count := len(data) //数组长度
//外层循环数组
for i := 1; i <= count; i++ {
//内层对比循环,把最大或者最小数沉入最后
for j :=0; j < count-i; j++ {
if data[j] < data[j+1] {
tmp := data[j]
data[j] = data[j+1]
data[j+1] = tmp
}
}
}
return data
}指针实现:
package main
import "fmt"
func main() {
var nums = []int{20,1,3,2,5,4,7,9,8,6,21,100}
var listStr = sort(&nums) //地址传递
for _, key := range listStr{
fmt.Println(key)
}
}
//排序从大到小
func sort(data *[]int) []int{
count := len(*data) //数组长度
//外层循环数组
for i := 1; i <= count; i++ {
//内层对比循环,把最大或者最小数沉入最后
for j :=0; j < count-i; j++ {
if (*data)[j] < (*data)[j+1] {
tmp := (*data)[j]
(*data)[j] = (*data)[j+1]
(*data)[j+1] = tmp
}
}
}
return *data
}四:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少
package main
import (
"fmt"
"math" //数学函数包
"strconv" //转换类型
)
func main() {
for i :=1; i<=10000; i++ {
a100 := mySqrt(i+100)
b100 := strConv(a100)
a268 := mySqrt(i+268)
b268 := strConv(a268)
if(a100-b100 == 0 ) && (a268-b268 == 0 ){
fmt.Println(i)
}
}
}
//求平方根
func mySqrt(x int) float64 {
fStr := float64(x)
return math.Sqrt(fStr)
}
//float64 转 字符串取小数点2位,再转float64
func strConv(x float64) float64{
str := fmt.Sprintf("%.2f",x)
strData,_ := strconv.ParseFloat(str,64)
return strData
}执行结果:
21 261 1581
五:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?这段话看不明白,其实就是斐波那契数列:第1列和第2列都是1,从第3列开始,每1列的值为前面两列之和。我们用go 取一下第N列
递归:
package main
import (
"fmt"
)
func main() {
a := fbnq(10) //取N列
fmt.Println(a) //第10列是55
}
//递归
func fbnq(x int) int {
if(x == 1 || x == 2){
return 1
}
return fbnq(x-1)+fbnq(x-2)
}递推互换:
package main
import (
"fmt"
)
//斐波那契取N列
func main() {
a := fbnq(10) //取第10列
fmt.Println(a)
}
//递推互换
func fbnq(x int) int {
//第1第2列都为1
if(x == 1 || x == 2){
return 1
}
t1 := 1 //初始第1列
t2 := 1 //初始第2列
/*
第4列开始执行
第3列for不满足,跳过for直接执行底下的 return t1+t2
*/
for i :=3; i < x; i++{
tmp := t1+t2 //tmp第一次为2,循环中往后面带
t1 = t2
t2 = tmp
}
return t1+t2
}六:打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。
package main
import (
"fmt"
)
/*
//水仙花数:3位数,各位数字立方和等于该数本身
首先要取位数
个位:取模 i%10
十位:整除再取模 i/10%10
百位:整除再取模 i/100%10
N 位:i/N%10
*/
func main() {
for i := 100; i<=999; i++ {
gewei := power(i%10)
shiwei := power(i/10%10)
baiwei := power(i/100%10)
if (gewei+shiwei+baiwei) == i {
fmt.Println(i)
}
}
}
func power(x int)int{
str := x * x * x
return str
}执行结果:153 370 371 407