天天看點

GO語言學習初級之代碼案例01

@(go語言 黑馬)[GO語言]

##判斷是否為閏年

  • 題目:手動輸入一個年份,判斷出該年份是否為閏年
  • 代碼如下:邏輯思路在注釋中
package main

import "fmt"

//手動輸入一個年份,判斷出該年份是否為閏年
func main() {
	var a int
	fmt.Scan(&a) //輸入一個年份
	var b bool   //b為true則為閏年 false不是閏年

	//能被400整除的為閏年,能被4整除,同時不被100整除的為閏年;代碼實作如下:
	//(a%400==0) || (a%4==0 && a%100!=0);|| 或語句

	if a%400 == 0 {
		b = true
	} else if a%100 != 0 && a%4 == 0 {
		b = true
	} else {
		b = false
	}
	fmt.Println(b)
}
           

##循環驗證密碼

  • 題目:提示使用者輸入密碼,如果密碼輸入錯誤,則給出提示,并讓使用者再次輸入,直到密碼輸入正确為止
  • 代碼如下:邏輯思路在注釋中
package main

import "fmt"

//提示使用者輸入密碼,如果密碼輸入錯誤,則給出提示,并讓使用者再次輸入,直到密碼輸入正确為止

func main() {
	var password string //密碼為字元串類型變量
	fmt.Println("請輸入密碼:")

IMPROT:
	fmt.Scan(&password)
	if password == "xhl1995" { //這裡設定的密碼為"xhl1995",你也可以設定任意密碼
		fmt.Println("登陸成功!")
	} else {
		fmt.Println("密碼輸入錯誤!請再次輸入:")
		goto IMPROT //goto 傳回到IMPROT标記位置,繼續執行代碼
		//這裡goto就實作了循環輸入密碼的功能
	}
}
           

##月份天數查詢

  • 題目:輸入想要查詢的年份和月份,便可查詢到該年該月的天數
  • 代碼如下:這裡使用的是switch實作的,邏輯思路在注釋中
package main

import "fmt"

//輸入想要查詢的年份和月份,便可查詢到該年該月的天數

func main() {
	var year int
	var month int
	var day int
	
	//手動輸入年月:
	fmt.Println("請輸入年份:")
	fmt.Scan(&year)
	fmt.Println("請輸入月份:")
	fmt.Scan(&month)

	//月份天數一共有三種情況:30天,31天,2月29天,閏年的2月28天,是以這裡使用switch要友善些
	if month > 0 && month <= 12 {
		switch month {
		case 1:
			fallthrough
			//fallthrough表示不跳出循環,并執行下一層代碼,
			// 不加fallthrough則隻執行本層,因為裡面内置break函數
		case 3:
			fallthrough
		case 5:
			fallthrough
		case 7:
			fallthrough
		case 8:
			fallthrough
		case 10:
			fallthrough
		case 12:
			day = 31//1,3,5,7,8,10,12月份都為31天
		case 2:
			//判斷是否為閏年
			if year%400 == 0 {
				day = 29
			} else if year%4 == 0 && year%100 != 0 {
				day = 29
			} else {
				day = 28
			}
		default://default代表其餘的意思
			day = 30
		}
		fmt.Printf("%d年%d月有%d天", year, month, day)
	} else {
		fmt.Println("月份輸入錯誤!")
	}
}
           

##利用GO語言解決一道數學題

  • 題目:某校2006年有80000名學生,往後每年增加25%,問:哪年人數能夠達到20萬
  • 代碼如下:這裡使用的是switch實作的,邏輯思路在注釋中
package main

import "fmt"

//某校2006年有80000名學生,往後每年增加25%,問:哪年人數能夠達到20萬

func main() {
//利用for循環解決實際問題,不要将要輸出的變量當做循環條件
	var year = 2006
	for amount := 80000.0; amount < 200000; amount *= 1.25 { //當人數達到20萬,則停止循環
		year++
	}
	fmt.Printf("%d年學員人數達到20萬", year)
}
           

##百錢百雞

  • 題目:公雞價格5錢,母雞價格為3錢,1錢可以買3隻小雞,問:如何用100錢買到一百隻雞?
  • 代碼如下:這裡使用的是switch實作的,邏輯思路在注釋中
package main

import "fmt"

//公雞價格5錢,母雞價格為3錢,1錢可以買3隻小雞,問:如何用100錢買到一百隻雞?

func main() {
	chicken := 0
	a := 0 //記錄運作次數
	for cock := 0; cock <= 20; cock++ {//最多隻能買20隻公雞
		for hen := 0; hen <= 33; hen++ {//最多隻能買33隻母雞
			for chicken := 0; chicken <= 100; chicken += 3 {//最多不能超過100隻雞
				if cock+hen+chicken == 100 && cock*5+hen*3+chicken/3 == 100 {//滿足:錢數100,雞數100
				fmt.Printf("公雞:%d 母雞:%d 小雞:%d\n", cock, hen, chicken)
				}
			a++//每循環一次,a加1
			}
		}
	}
	fmt.Println("運作次數:", a)
}
           
  • 改程式還可以優化,使程式運作次數大大減少:
package main

import "fmt"

//公雞價格5錢,母雞價格為3錢,1錢可以買3隻小雞,問:如何用100錢買到一百隻雞?

func main() {
	chicken := 0
	a := 0 //記錄運作次數
	for cock := 0; cock <= 20; cock++ {
		for hen := 0; hen <= 33; hen++ {
			chicken = 100 - cock - hen//減少chicken的循環
			if cock*5+hen*3+chicken/3 == 100 && chicken%3 == 0 {
				fmt.Printf("公雞:%d 母雞:%d 小雞:%d\n", cock, hen, chicken)
			}
			a++
		}
	}
	fmt.Println("運作次數:", a)
}