LoginSignup
1
0

More than 3 years have passed since last update.

[Golang][競プロ]子ども達に大福を分け与える問題について解説してみた

Posted at

はじめに

今日は、競技プログラミングをしてみたので、回答のロジックについて共有致します。
なお、競技プログラミングサービス側の規約もありますので、問題文は全く違うものを用意しておりますが、もし万が一コンプライアンスに問題があれば、ご連絡頂けると嬉しいです。

問題

おばあさんは、大福を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人に分けても良いかとも思いましたが、思い切ってスルーしました。
多くの言語で同じ挙動を見せるかと思いますが、いわゆる「除算の商」は整数のみになります。

この特性を利用して、シンプルに割り算しただけにしました。
(奇数の場合は、商は少数にならずに切り捨てられるため。)

さいごに

今回はこれで終わります。
何かあれば、ぜひお気軽にコメント頂けると嬉しいです。
最後までありがとうございました。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0