package main import ( "bufio" "fmt" "os" "strconv" "strings" ) func main() { in := bufio.NewScanner(os.Stdin) in.Scan() str := in.Text() // 最後に改行コードが入った状態で返されるため、ここでは改行コードを出力しない。 fmt.Print(no3(str)) } // 3の倍数および3の付く数を改行区切りで返す。 func no3(str string) string { sp := strings.Split(str, " ") start, _ := strconv.Atoi(sp[0]) end, _ := strconv.Atoi(sp[1]) rtnString := "" for ; start < end; start++ { s := strconv.Itoa(start) // 3の倍数 if start%3 == 0 { rtnString += s + "\n" continue } // 3の付く数 if isThree(s) { rtnString += s + "\n" } } return rtnString } // 3の付く数かどうかを判定する。 func isThree(str string) bool { for _, byte := range str { // 51はASCIIコードの"3" if byte == 51 { return true } } return false }