【配列活用メニュー】> 【配列への副作用を伴う操作】STEP: 8 全ての要素を用いた処理 (paizaランク D 相当) [難易度: 1628 ±17]
※リンク先へ移動するためには[paiza]へのログインが必要です。
配列 A の要素数 N と配列 A の各要素 A_1, A_2, ..., A_N が与えられるので、A の要素の全てのペアについてのかけ算の結果を出力してください。
入力値(例)
2
1
1
出力値(例)
1
解答例
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<?php $n = trim(fgets(STDIN)); for($i = 0;$i < $n; $i++) { $array[] = trim(fgets(STDIN)); } for($i = 1; $i < $n; $i++) { for($j = 0; $j < $i; $j++) { echo $array[$i] * $array[$j]."\n"; } } ?> |
解説
問題の意味が分からなくてつまずいてしまった問題です。
分かりやすいほうの入力例2を使って解説します。
入力例2
5
1
2
3
4
5
出力例2
2
3
6
4
8
12
5
10
15
20
まず、配列「$array = [1,2,3,4,5]」を用意します。
$array[0] = 1
$array[1] = 2
$array[2] = 3
$array[3] = 4
$array[4] = 5
1回転目
$i = 1
$j = 0
echo $array[$i] * $array[$j]."\n";
($array[1] * $array[0])は、 「2 * 1」になります。(出力2)
※配列番号なので、$array[1]は、2です。(ずれているの注意)
内側の$jループ($j < $i)の$iが1なので、1回転目のループが終わります。
2回転目
$i = 2
$j = 0
echo $array[$i] * $array[$j]."\n";
($array[2] * $array[0])は、 「3 * 1」になります。(出力3)
$i = 2
$j = 1
echo $array[$i] * $array[$j]."\n";
($array[2] * $array[1])は、 「3 * 2」になります。(出力6)
内側の$jループ($j < $i)の$iが2なので、2回転目のループが終わります。
3回転目
$i = 3
$j = 0
echo $array[$i] * $array[$j]."\n";
($array[3] * $array[0])は、 「4 * 1」になります。(出力4)
$i = 3
$j = 1
echo $array[$i] * $array[$j]."\n";
($array[3] * $array[1])は、 「4 * 2」になります。(出力8)
$i = 3
$j = 2
echo $array[$i] * $array[$j]."\n";
($array[3] * $array[2])は、 「4 * 3」になります。(出力12)
内側の$jループ($j < $i)の$iが3なので、3回転目のループが終わります。
4回転目
$i = 4
$j = 0
echo $array[$i] * $array[$j]."\n";
($array[4] * $array[0])は、 「5 * 1」になります。(出力5)
…
このように、1回転ずつインデックスキーが大きくなっていき、そのインデックスキー以下のものを全て掛け算して出力という挙動を繰り返します。