1 回答

TA貢獻1850條經驗 獲得超11個贊
第一個解決方案
這就是你想要的:
func main() {
var limit int
var name string
_, err := fmt.Scanln(&limit)
if err != nil {
fmt.Println(err)
}
var names []string
var presence []string
for i := 0; i < limit; i++ {
_, err := fmt.Scanln(&name)
if err != nil {
fmt.Println(err)
}
var exist = false
for _, a := range names {
if a == name {
exist = true
break
}
}
if !exist {
names = append(names, name)
presence = append(presence, "NO")
} else {
presence = append(presence, "YES")
}
}
fmt.Println(presence)
}
首先Scanln返回 ,error您需要檢查它。
第二:追加到數組必須在內循環之外。嘗試使用 debugPrintln()來調試您的算法。
將代碼移至單獨的函數
為了清楚起見,我建議將存在性檢查移至單獨的函數:
func exists(a []string, element string) bool {
for _, e := range a {
if e == element {
return true
}
}
return false
}
func main() {
var limit int
var name string
_, err := fmt.Scanln(&limit)
if err != nil {
fmt.Println(err)
}
var names []string
var presence []string
for i := 0; i < limit; i++ {
_, err := fmt.Scanln(&name)
if err != nil {
fmt.Println(err)
}
if !exists(names, name) {
names = append(names, name)
presence = append(presence, "NO")
} else {
presence = append(presence, "YES")
}
}
fmt.Println(presence)
}
優化
在前面的代碼中,我們在每次循環中將字符串數組傳遞給函數。如果數組更大,那就不好了,最好將指向字符串數組的指針傳遞給函數(或指向字符串的指針數組)。
- 1 回答
- 0 關注
- 126 瀏覽
添加回答
舉報