Go
の基本的な文法に慣れるため、AtCoder Beginners Selectionを解いてみようと思う
AtCoder Beginners Selectionとは?
このコンテストは、「AtCoderに登録したけど何をしていいか分からない・・・!」という人に向けて作られた、初心者向け問題集です。
PracticeA Welcome to AtCoder
PracticeAはGo
のサンプルコードが問題文の下にある。
fmt.Scan
関数で標準入力からデータを読み込み、指定した変数に値を格納できる。
ACコード
package main
import (
"fmt"
)
func main() {
var a, b, c int
var s string
fmt.Scan(&a, &b, &c)
fmt.Scan(&s)
result := a + b + c
fmt.Println(result, s)
}
ABC086A Product
https://atcoder.jp/contests/abs/tasks/abc086_a
aとbをかけて%2
で偶奇判定すれば良い
ACコード
package main
import (
"fmt"
)
func main() {
var a, b int
fmt.Scan(&a, &b)
if a*b%2 == 0 {
fmt.Println("Even")
} else {
fmt.Println("Odd")
}
}
ABC081A Placing Marbles
strings.Count
関数で文字列に含まれる特定の文字列をカウントできる
ACコード
package main
import (
"fmt"
"strings"
)
func main() {
var s string
fmt.Scan(&s)
fmt.Println(strings.Count(s, "1"))
}
ABC081B Shift only
for
ループの条件部分に何も書かない場合、無限ループになることを利用して解いた
ACコード
package main
import "fmt"
func main() {
var n int
fmt.Scan(&n)
a := make([]int, n)
for i := 0; i < n; i++ {
fmt.Scan(&a[i])
}
ans := 0
for {
flg := true
for i, _ := range a {
if a[i]%2 == 0 {
a[i] /= 2
} else {
flg = false
}
}
if flg {
ans += 1
} else {
break
}
}
fmt.Println(ans)
}
ABC087B Coins
全探索すれば良い
ACコード
package main
import "fmt"
func main() {
var a, b, c, x int
fmt.Scan(&a, &b, &c, &x)
ans := 0
for ai := 0; ai <= a; ai++ {
for bi := 0; bi <= b; bi++ {
for ci := 0; ci <= c; ci++ {
if x == ai*500+bi*100+ci*50 {
ans += 1
}
}
}
}
fmt.Println(ans)
}
ABC083B Some Sums
strconv
パッケージを使用して、文字列と整数の変換ができる
ACコード
package main
import (
"fmt"
"strconv"
)
func main() {
var n, a, b int
fmt.Scan(&n, &a, &b)
ans := 0
for i := 1; i <= n; i++ {
str_i := strconv.Itoa(i)
work := 0
for _, ele := range str_i {
digit, _ := strconv.Atoi(string(ele))
work += digit
}
if a <= work && work <= b {
ans += i
}
}
fmt.Println(ans)
}
ABC088B Card Game for Two
Goでint
のスライスをソートする方法は
// sはintのスライス
sort.Ints(s) // 昇順
sort.Sort(sort.Reverse(sort.IntSlice(s))) // 降順
ACコード
package main
import (
"fmt"
"sort"
)
func main() {
var n int
fmt.Scan(&n)
a := make([]int, n)
for i := 0; i < n; i++ {
fmt.Scan(&a[i])
}
sort.Sort(sort.Reverse(sort.IntSlice(a)))
ans := 0
for i, num := range a {
if i%2 == 0 {
ans += num
} else {
ans -= num
}
}
fmt.Println(ans)
}
後半に続く