Golang语法的25个练习题:1至5题

2023-02-13
3分钟阅读时长

题目1:水仙花数

水仙花数(Narcissistic number)也被称为超完全数字不变数(pluperfect digital invariant, PPDI)、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数(Armstrong number),水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身。例如:1^3 + 5^3+ 3^3 = 153。

package main

import (
	"fmt"
	"math"
)

func main() {
    // 写法一
    for i := 100; i < 1000; i++ {
        // 取百位数字 123//100=1
        // 取十位数字 123//10=12  12%10=2
        // 取个位数字 123%10=3
        i1, i2, i3 := i/100, i/10%10, i%10
        if int(math.Pow(float64(i1), 3)+math.Pow(float64(i2), 3)+math.Pow(float64(i3), 3)) == i {
            fmt.Printf("%d是水仙花数\n", i)
            // 153 是水仙花数
            // 370 是水仙花数
            // 371 是水仙花数
            // 407 是水仙花数
        }
    }
    
    // 写法二
    for i := 1000; i < 10000; i++ {
        sum := 0
        for k := i; k > 0; k = k / 10 {
            // 个十百
            sum += int(math.Pow(float64(k%10), 3))
        }
        if sum == i {
            fmt.Printf("%d是四叶玫瑰数\n", i)
        }
    }
}

题目2:四叶玫瑰数

四叶玫瑰数是4位数的自幂数。自幂数是指一个 n 位数,它的每个位上的数字的 n 次幂之和等于它本身。(例如:当n为3时,有1^3 + 5^3 + 3^3 = 153,153即是n为3时的一个自幂数,3位数的自幂数被称为水仙花数)。

package main

import (
	"fmt"
	"math"
)

func main() {
    // 写法一
    for i := 1000; i < 10000; i++ {
        // 取千位数字 1234//1000=1
        // 取百位数字 1234//100=12  12%10=2
        // 取十位数字 1234//10=123  123%10=3
        // 取个位数字 1234%10=4
        i1, i2, i3, i4 := i/1000, i/100%10, i/10%10, i%10
        if int(math.Pow(float64(i1), 4)+math.Pow(float64(i2), 4)+math.Pow(float64(i3), 4)+math.Pow(float64(i4), 4)) == i {
            fmt.Printf("%d是四叶玫瑰数\n", i)
            // 1634 是四叶玫瑰数
            // 8208 是四叶玫瑰数
            // 9474 是四叶玫瑰数
        }
    }
    
    // 写法二
    for i := 1000; i < 10000; i++ {
        sum := 0
        for k := i; k > 0; k = k / 10 {
            // 个十百千
            sum += int(math.Pow(float64(k%10), 4))
        }
        if sum == i {
            fmt.Printf("%d是四叶玫瑰数\n", i)
        }
    }
}

题目3:逆序输出字符串

package main

import (
    "fmt"
    "log"
    "os"
)

func main() {
    fmt.Print("请输入字符串:")
    read := make([]byte, 1024)
    n, err := os.Stdin.Read(read) // 从标准输入流读取数据
    if err != nil {
        log.Fatalln(err)
    }
    for i, j := 0, n-1; i < j; i, j = i+1, j-1 {
        read[i], read[j] = read[j], read[i]
    }
    fmt.Println(string(read[:n]))
}

题目4:猜数字小游戏

需求分析:

  1. 随机生成一个100以内的整数,共有10次机会
  2. 开始游戏,输入猜测的数字
  3. 如果猜小了,提示猜小了
  4. 如果猜大了,提示猜大了
  5. 猜对了,提示猜对了,并且结束游戏
  6. 10次机会用完还没猜对,提示游戏结束,没有猜到。
package main

import (
    "fmt"
    "log"
    "math/rand"
    "os""strconv"
    "time"
)

func main() {
    rd := rand.New(rand.NewSource(time.Now().UnixNano()))
    number := rd.Intn(100)
    for i := 0; i < 10; i++ {
        fmt.Print("请输入你要猜测的数字:")
        read := make([]byte, 100)
        n, err := os.Stdin.Read(read)
        if err != nil {
            log.Fatalln(err)
        }
        choice, err := strconv.Atoi(string(read[:n-1])) // n-1 是去除最后的回车(换行符)
        if err != nil {
            fmt.Println("输入的不是数字")
            continue
        }
        if choice > number {
            fmt.Println("你猜大了")
        } else if choice < number {
            fmt.Println("你猜小了")
        } else {
            fmt.Println("你猜对了,真棒!")
            fmt.Printf("你一共用了%d次机会\n", i+1)
            return
        }
        fmt.Printf("还剩%d次机会\n", 9-i)
    }
    fmt.Println("游戏结束,你没有猜到")
}

题目5:百鸡百钱

需求分析:

  1. 公鸡每只5元,母鸡每只3元,小鸡3只一元,现要求用100元钱买100只鸡(三种类型的鸡都要买),问公鸡、母鸡、小鸡各买几只?
  2. 数学:
  3. 设公鸡买了x只,母鸡买了y只,小鸡买了z只
  4. x+y+z= 100
  5. 5x+3y+z/3 = 100

算法思路

  1. 以公鸡为突破点,公鸡5元一只,100元最多只能买20只,
  2. 由于三种鸡都要买,所以公鸡数一定是小于20的。
  3. 母鸡每只3元,100全拿来买母鸡,最多也不能超过33只
  4. 设公鸡数为x,母鸡数为y,小鸡z只
  5. 只要满足5x+3y+z/3=100 和 x+y+z==100 就可以输出此种组合的结果.
package main

import (
    "fmt"
    "strings"
)

func main() {
    count := 0
    for x := 1; x < 20; x++ {
        for y := 1; y < 33; y++ {
            z := 100 - x - y
            if z > 0 && z%3 == 0 && 5*x+3*y+z/3 == 100 {
                count++
                fmt.Println(strings.Repeat("=", 60))
                fmt.Printf("第%d种买法,公鸡买了%d只,母鸡买了%d只,小鸡买了%d只\n", count, x, y, z)
            }
        }
    }
}

python原文:https://www.52pojie.cn/thread-1689186-1-1.html

关注公众号获得更多精彩文章

公众号:程序员大兵