LoginSignup
0
0

More than 3 years have passed since last update.

カードを集めるプログラム

Posted at

あなたは友達に勧められて、とあるカードゲームを始めることにしました。
そのカードゲームには、カード番号 1 から M までの M 種類のカードがあります。
あなたは完璧主義者なので、どうしても M 種類全てのカードが欲しくなり、カードを N 枚買いました。

さあ、買ってきた N 枚のカードを順番に開けていきましょう!

開けたカードのカード番号が順番に与えられるので、M 種類そろったのは何枚開けたときかを出力するプログラムを書いて下さい。

以下は入力例 1 を図示したものです。

スクリーンショット 2021-04-05 23.16.57.png

解き方のポイント

ポイントは「カードの種類が揃った」という条件をどのようにして表現するか。
今回は配列にあらかじめ、総種類の枚数を入れておき、cardsとcardの番号を照らし合わせて同じ番号があったら配列からデリートしていく。
if文で配列の中身が無くなった時にブロック変数の「i + 1」で数を出力し、exitで繰り返し処理をストップさせる。
また、「unlucky」の出力は、真偽値を用いて行う。

コード例

N, M = gets.chomp.split(' ').map(&:to_i)
cards = Array.new
flag = false

M.times do |i|
    cards << (i + 1)
end

N.times do |i|
    card = gets.to_i
    cards.delete(card)
        if cards == []
            puts i + 1
            flag = true
            exit
        end
end 

puts 'unlucky' if flag == false
0
0
1

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
0
0