はじめに
今日は、競技プログラミングをしてみたので、回答のロジックについて共有致します。
なお、競技プログラミングサービス側の規約もありますので、問題文は全く違うものを用意しておりますが、もし万が一コンプライアンスに問題があれば、ご連絡頂けると嬉しいです。
問題
おばあさんは、大福をN
個持っています。
2人の孫が遊びに来たので、大福を分けてやることにしました。
標準入力で大福の数N
を与えられた場合、2人の孫はいくつずつもらえるでしょう?
ただし、大福の数が奇数だった場合、孫のどちらかが多くなってしまいケンカになりかねないので、その場合はおばあさんが1つ食べるとします。
回答
問題文の稚拙さは、ご容赦ください。笑
それでは、僕の回答について共有致します。
コード
package main
import "fmt"
func main(){
var i int
fmt.Scanf("%d", &i)
r := i / 2
fmt.Println(r)
}
解説
今回は、かなり初歩的な問題だったかと思います。
おそらく、標準入力の受け取りと出力の確認を兼ねた、ウォーミングアップといったところでしょうか。
では、簡単ではございますが、解説していきます。
fmt.Scanf
関数で標準入力を取得
以前書いた記事でも共有させて頂いた、この方法で行いました。
色々な方法がありますが、記述量も少なく直感的に使える関数で、個人的には好きな関数です。笑
おばあちゃんが1つ食べるのはスルーしたロジック
今回は、N
が奇数なら-1、偶数ならそのまま、2人に分けても良いかとも思いましたが、思い切ってスルーしました。
多くの言語で同じ挙動を見せるかと思いますが、いわゆる「除算の商」は整数のみになります。
この特性を利用して、シンプルに割り算しただけにしました。
(奇数の場合は、商は少数にならずに切り捨てられるため。)
さいごに
今回はこれで終わります。
何かあれば、ぜひお気軽にコメント頂けると嬉しいです。
最後までありがとうございました。