質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

ループ

ループとは、プログラミングにおいて、条件に合致している間、複数回繰り返し実行される箇所や、その制御構造を指します

Q&A

解決済

2回答

1023閲覧

PHPの二重ループ問題が解けません。

ah6BD2gZo5GnjnT

総合スコア46

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

ループ

ループとは、プログラミングにおいて、条件に合致している間、複数回繰り返し実行される箇所や、その制御構造を指します

0グッド

0クリップ

投稿2020/07/08 12:53

編集2020/07/09 00:23

作成したいプログラム

入力例が仮に、

3 2 1(左からa, b, cとする)
2 2
1 2
1 1
だとします。

cとa行目(1-3行目までのいずれ)の
1からb番目までの数字が一致した場合は、
手元に、1ポイント増えていきます。

期待する出力値
0
1
2

問題点
該当する数字が存在する行に移動すると、カウントが継続されてしまい、リセットされない。

実際の出力値
0
1
3

PHP

1<?php 2list($a, $b, $c) = explode(" ",trim(fgets(STDIN))); 3 4for($j = 0; $j < $b; $j++){ 5$answer[$j] = explode(" ",trim(fgets(STDIN))); 6} 7 8$cnt = 0; 9for($i = 0; $i < $a; $i++){ 10 for($j = 0; $j < $b; $j++){ 11 12if($answer[$i][$j] == $c){ 13$cnt+= 1; 14} 15} 16echo $cnt."\n"; 17} 18?> 19

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/07/08 13:08

競技系に見えます。 出典元の記述をしてください。 場合によっては、規約違反なので削除申請をしてください。
ah6BD2gZo5GnjnT

2020/07/08 13:15

paizaのレベルアップ問題集が出典元ですが、こちらは規約違反にはなりません。
ah6BD2gZo5GnjnT

2020/07/08 13:34

スキルアップチェック本問題を掲載するのは規約違反です。
thyda.eiqau

2020/07/08 18:23

$cと$a行目(1-3行目までのいずれ)の$b番目の数字が一致した場合は、 手元に、1ポイント増えていきます。 期待する出力値 0 1 2 の意味がよくわからないです。各行の$b列目の値が$cと一致していたらポイントが増えるのであれば、各行の2列めである2, 2, 1が$cである1と一致するか評価され、出力は0, 0, 1になるのでは?
m.ts10806

2020/07/08 19:02

誤解を生まぬよう、前提や背景は質問本文に明記してください
ah6BD2gZo5GnjnT

2020/07/09 00:22

問題文を一部訂正しております。誤解を与えて申し訳ございません
退会済みユーザー

退会済みユーザー

2020/07/09 02:05 編集

質問本文に、出典元の記述をしてください。 リンクするなり、URL を記述するなりすれば良いです。 また、質問内容が省略されているせいでおかしな内容になっています。 整理してください。
guest

回答2

0

分からない部分のみ今後は質問をさせて頂きます。丸投げのような質問になってしまい、大変失礼しました。問題は無事、解くことが出来ました。ありがとうございます。

投稿2020/07/09 12:21

ah6BD2gZo5GnjnT

総合スコア46

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

質問への追記・修正の依頼の欄にも書きましたが、下記の意味がわからないです。

$cと$a行目(1-3行目までのいずれ)の$b番目の数字が一致した場合は、

手元に、1ポイント増えていきます。

期待する出力値

0
1
2

各行の$b列目の値が$cと一致していたらポイントが増えるのであれば、各行の2列めである2, 2, 1が$cである1と一致するか評価され、出力は0, 0, 1になるのではないですか?
というか、社会一般に通じる「ループのインデックスである整数値」を意味する i とかは別として、1文字変数は混乱のもとなので使わないでください。人に見せるコードならなおさらです。

以下のコードは、先述のわたしの理解が正しいという前提のものです。

php

1<?php 2class DummySTDIN { 3 private $fgetsCount = 0; 4 private $source = <<<EOT 53 2 1 62 2 71 2 81 1 9EOT; 10 11 public function fgets() { 12 return explode(PHP_EOL, $this->source)[$this->fgetsCount++]; 13 } 14} 15$dummySTDIN = new DummySTDIN(); 16// NOTE: ここから上は気にしない 17 18// FIXME: ここから下の `$dummySTDIN->fgets()` を `fgets(STDIN)` に読み替えること 19// 与えられる文字列の1行目には、 20// - 「検証する要素の行数」 21// - 「各行において評価する値が格納されている列番号」 22// - 「正答」 23// がスペース区切りで与えられる 24list($rows_qty, $check_col, $answer) = explode(' ', $dummySTDIN->fgets()); 25 26// 列番号をインデックスになおす 27$check_col = intval($check_col, 10) - 1; 28 29$points = 0; 30for($row = 0; $row < $rows_qty; $row++) { 31 // 検証中の行の値をスペースで区切って、 $check_col列の値を取得する 32 $answer_in_this_row = explode(' ', $dummySTDIN->fgets())[$check_col] ?? NAN; 33 34 // この行の値と正答値が一致するなら$pointsに加算する 35 $points += $answer_in_this_row === $answer; 36 37 // $pointsを出力する 38 echo $points . PHP_EOL; 39} 40

投稿2020/07/08 18:37

thyda.eiqau

総合スコア2982

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問