go练习题

// 循环打印输入的月份的天数。 使用continue实现
// 要有判断输入的月份是否有错误的语句
func main() {
	var month, year int

	// 循环输入月份
	for {
		fmt.Print("Enter year (0 to exit): ")
		fmt.Scan(&year)

		// 退出条件
		if year == 0 {
			break
		}

		fmt.Print("Enter month (1-12): ")
		fmt.Scan(&month)

		// 判断月份是否合法
		if month < 1 || month > 12 {
			fmt.Println("Invalid month! Please enter a number between 1 and 12.")
			continue // 如果输入无效,继续循环
		}

		// 判断月份天数
		days := 0
		switch month {
		case 1, 3, 5, 7, 8, 10, 12:
			days = 31
		case 4, 6, 9, 11:
			days = 30
		case 2:
			// 判断是否是闰年
			if (year%4 == 0 && year%100 != 0) || (year%400 == 0) {
				days = 29
			} else {
				days = 28
			}
		}

		// 输出结果
		fmt.Printf("Year %d, Month %d has %d days.\n", year, month, days)
	}
}

  

//编写一个函数:
//随机猜数游戏:
//随机生成一个 1--100 的整数
//有十次机会
//如果第一次就猜中,提示“你真是个天才”如果第2--3 次猜中,提示“你很聪明,赶上我了”如果第 4--9 次猜中,提示“一般般”如果最后一次猜中,提示“可算猜对啦-次都没猜对,提示“说你点啥好呢
func guessNumber() {
	// 随机生成一个 1 到 100 的整数
	rand.Seed(time.Now().UnixNano()) // 设置随机种子
	target := rand.Intn(100) + 1     // 生成 1 到 100 之间的随机数

	var guess int
	var attempts int

	// 开始猜测
	for attempts < 10 {
		attempts++
		fmt.Print("请输入你的猜测(1 到 100):")
		fmt.Scan(&guess)

		if guess == target {
			// 判断猜测次数并打印相应的提示
			switch attempts {
			case 1:
				fmt.Println("你真是个天才")
			case 2, 3:
				fmt.Println("你很聪明,赶上我了")
			case 4, 5, 6, 7, 8, 9:
				fmt.Println("一般般")
			case 10:
				fmt.Println("可算猜对啦")
			}
			return // 猜中后退出
		} else if guess < target {
			fmt.Println("猜的数字太小了!")
		} else {
			fmt.Println("猜的数字太大了!")
		}
	}

	// 如果 10 次都没猜中
	fmt.Println("说你点啥好呢")
}

func main() {
	guessNumber()
}
//编写一个函数:输出 100 以内的所有素数,每行显示5个;并求和
// 判断一个数是否是素数
func isPrime(n int) bool {
	if n <= 1 {
		return false
	}
	for i := 2; i*i <= n; i++ {
		if n%i == 0 {
			return false
		}
	}
	return true
}

// 输出素数并求和
func printPrimesAndSum() {
	count := 0 // 用来控制每行打印多少个素数
	sum := 0   // 累加素数的和

	// 遍历 1 到 100 之间的数
	for i := 2; i <= 100; i++ {
		if isPrime(i) {
			// 如果是素数,打印该素数
			fmt.Printf("%d ", i)
			sum += i // 累加素数的和
			count++

			// 每行输出 5 个素数
			if count%5 == 0 {
				fmt.Println()
			}
		}
	}

	// 输出所有素数的和
	fmt.Printf("\nSum of primes: %d\n", sum)
}

func main() {
	printPrimesAndSum()
}

  

//编写一个函数,判断是打鱼还是晒网.
//中国有句俗语叫“三天打鱼两天晒网”。如果从1990年1月1日起开始执行“三天打鱼两天晒网”。如何判断在以后的某一天中是“打鱼”还是“晒网”?
// 判断某一天是“打鱼”还是“晒网”
func fishOrNet(date time.Time) string {
	// 设置开始日期 1990年1月1日
	startDate := time.Date(1990, 1, 1, 0, 0, 0, 0, time.UTC)
	// 计算从开始日期到目标日期的天数差
	daysDifference := int(date.Sub(startDate).Hours() / 24)

	// 计算周期(5天周期)
	// 余数 0-2 为打鱼,余数 3-4 为晒网
	if daysDifference%5 < 3 {
		return "打鱼"
	} else {
		return "晒网"
	}
}

func main() {
	// 输入日期
	var inputDate string
	fmt.Print("请输入日期 (格式: yyyy-mm-dd): ")
	fmt.Scan(&inputDate)

	// 将输入的日期字符串转换为 time.Time 类型
	date, err := time.Parse("2006-01-02", inputDate)
	if err != nil {
		fmt.Println("日期格式错误,请重新输入!")
		return
	}

	// 判断并输出结果
	result := fishOrNet(date)
	fmt.Printf("在 %s 这一天是:%s\n", inputDate, result)
}

  

输出小写的 a-z 以及大写的 Z一A,使用 for

import "fmt"

func main() {
	// 输出小写字母 a-z
	fmt.Println("小写字母 a-z:")
	for i := 'a'; i <= 'z'; i++ {
		fmt.Printf("%c ", i) // %c 用于打印字符
	}
	fmt.Println() // 换行

	// 输出大写字母 A-Z
	fmt.Println("大写字母 A-Z:")
	for i := 'A'; i <= 'Z'; i++ {
		fmt.Printf("%c ", i)
	}
	fmt.Println() // 换行

	// 输出大写字母 Z 到 A-I
	fmt.Println("大写字母 Z 到 A-I:")
	for i := 'Z'; i >= 'I'; i-- {
		fmt.Printf("%c ", i)
	}
	fmt.Println() // 换行
}

  

冒泡排序

func BubbleSort(arr []int) {
    n := len(arr)
    for i := 0; i < n-1; i++ {
        swapped := false
        for j := 0; j < n-1-i; j++ {
            if arr[j] > arr[j+1] {
                arr[j], arr[j+1] = arr[j+1], arr[j]
                swapped = true
            }
        }
        if !swapped {
            break
        }
    }
}

func main() {
    arr := []int{24, 69, 80, 57, 13, 10, 5, 42, 50}
    BubbleSort(arr)
    fmt.Println("排序后:", arr)
}

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2025-02-26 15:06  春分拂柳  阅读(14)  评论(0)    收藏  举报