###前提・実現したいこと
アルゴリズムを解いてる最中、配列の生成時、扱いに関して分からない事が複数あったので質問させて下さい。
初心者ながら考えながらコードに起こしたのですが、具体的には二次元配列の動きが分かりませんでした。
また改善できる点を指摘おねがいします。
###アルゴリズムの問題
N*Nの数字の文字列が一列ずつ標準入力から渡されます。
左上を起点とした斜めの文字列と右上を起点とした斜めの文字列カンマ区切りで出力せよ
問題では
N
と
N*N が渡されます
###入力される値
5
1 18 4 19 14
17 3 25 11 6
23 12 16 2 21
10 24 22 8 9
5 20 7 13 15
###該当のソースコード
ruby
1 2 3 4N = gets.to_i 5 6row=Array.new(N).map{Array.new(N,0)} #横 7col=Array.new(N).map{Array.new(N,0)} #縦 8naname=Array.new(2).map{Array.new(N,0)} #斜め 9 10 11N.times {|i| row[i] =gets.split(" ").map(&:to_i) } # 先に単純な横の列を配列に入れ込んだ 12 13 N.times do|i| 14 N.times do|j| 15 16 col[i][j] = row[j][i] 17 18 if (i==j) 19 naname[0][i] = row[i][j] 20 elsif (i+j == N-1) 21 naname[1][i] = row[i][j] 22 end 23 24 end 25 end 26puts naname[0].join(",") # 1,3,16,8,15 27puts naname[1].join(",") # 14,11,,24,5 #あれ!!!?? 28 29
###質問
1、ここのコードにたどり着くのに大分はまりました。
というのも二次元配列を生成するのが初めてに近かったからなのですが、横の配列rowの特定の添え字に標準入力で与えられる文字列の該当の値を代入しています。
これは過去のコードです。
ruby
1row=Array.new(N).map{Array.new(N)} 2#引数に初期値0を設定せず標準入力を取得して先に進んでいたのですが 3N.times {|i| row[i] =gets.split(" ").map(&:to_i)} 4 5puts row[0] #1 18 4 19 14 6puts row[0][0] #
後々この挙動に気づいたのですが、最後の出力にて内側の配列要素を取得することができませんでした。なぜなのでしょうか。
2、3度のtimesで若干見苦しいので綺麗な書き方があればお願いします。
3、”該当のソースコード”を見て貰うと理解して頂けますように、naname[1][2]だけ取得できません。
どこに問題が有るのか教えて下さい。
どうぞよろしくお願いします
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。