@(go語言 黑馬)[GO語言]
統(tǒng)計各字母的個數(shù)
- 題目:輸入一串字母,統(tǒng)計各個字母輸入的個數(shù)
- 邏輯:該案例統(tǒng)計字母上限由數(shù)組長度決定,可自行設(shè)置
- 代碼如下:
package main
import "fmt"
func main() {
fmt.Println("請輸入一串字母,以回車結(jié)束")
var array [20]byte
for i := 0; i < len(array); i++ {
fmt.Scanf("%c", &array[i]) //把輸入的每個字母記錄在切片array中
}
var ch [26]int //26個數(shù)字分別對應26個字母,用來統(tǒng)計各字母出現(xiàn)的次數(shù)
for i := 0; i < len(array); i++ {
ch[array[i]-'a']++
//array中的每個字母減去a,剛好在0到25之間,共26個數(shù),每個下標對應一個字母
//在Assic碼表中,每個字符對應一個數(shù)字,并且a-z是按照順序排列,所以可以得到上面的效果
}
for i := 0; i < len(ch); i++ {
if ch[i] > 0 { //出現(xiàn)了該字母就打印,沒有出現(xiàn)則不打印
fmt.Printf("%c出現(xiàn)了%d次\n", i+'a', ch[i])
}
}
}
找出一串數(shù)字中最大值的位置
- 題目:找出一串數(shù)字中最大值的位置
- 邏輯:邏輯在注釋中
- 代碼如下:
package main
import "fmt"
func main() { //求出切片中最大數(shù)的位置
var a, b int
fmt.Println("請輸入數(shù)組長度:")
fmt.Scan(&a)
fmt.Println("請輸入數(shù)組元素:")//這里輸入要用空格隔開,并且數(shù)量不能小于a的長度
arr := make([]int, a)
for i := 0; i < len(arr); i++ {
fmt.Scan(&b)
arr[i] = b
}
fmt.Println(arr)
//找出最大數(shù),并且不改變其位置,并記錄它的位置
var index int //記錄下標
temp := arr[0] //引入變量,用來與所有元素比較
for i := 0; i < a; i++ {
if arr[i] > temp {
temp = arr[i] //使temp等于比他大的元素
index = i //記錄每次滿足條件的元素下標,最后一個就是最大元素的下標
}
}
fmt.Printf("最大數(shù)為arr[%d]=%d", index, arr[index])
}
求自守數(shù)
- 題目:a的平方的末尾幾位數(shù)等于a,那么a為自守數(shù)
- 邏輯:位數(shù)不同的數(shù)字分開處理
- 代碼如下:
package main
import "fmt"
func main() {
//a的平方的末尾幾位數(shù)等于a,那么a為自守數(shù)
var num [10001]int
for i := 0; i <= 10000; i++ {//通過這個循環(huán),0-10000就儲存在切片中了
num[i] = i
}
for i := 0; i <= 10000; i++ {
if num[i] < 10 {
if num[i]*num[i]%10 == num[i] {//平方后,求出個位數(shù)
fmt.Printf("num[%d]=%d是自守數(shù)\n", i, num[i])
}
}
if 9 < num[i] && num[i] < 100 {
if num[i]*num[i]%100 == num[i] {
fmt.Printf("num[%d]=%d是自守數(shù)\n", i, num[i])
}
}
if 99 < num[i] && num[i] < 1000 {
if num[i]*num[i]%1000 == num[i] {
fmt.Printf("num[%d]=%d是自守數(shù)\n", i, num[i])
}
}
if 990 < num[i] && num[i] <= 10000 {
if num[i]*num[i]%10000 == num[i] {
fmt.Printf("num[%d]=%d是自守數(shù)\n", i, num[i])
}
}
}
}