teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

5

加筆修正

2018/05/23 11:06

投稿

退会済みユーザー
answer CHANGED
@@ -26,4 +26,6 @@
26
26
  return intdiv($arr['stock'], $arr['requirement']);
27
27
  }, $goods));
28
28
  ```
29
- (roundやめてintdivにしたら、気持ち処理時間も速まった。)
29
+ (roundやめてintdivにしたら、気持ち処理時間も速まった。)
30
+ intdiv()はphp7以降の関数なので、
31
+ それ以前の処理系では `floor($zaikoA / 2)` などとすること。

4

見直し

2018/05/23 11:06

投稿

退会済みユーザー
answer CHANGED
@@ -3,10 +3,10 @@
3
3
 
4
4
  $zaikoA = 1000;
5
5
  $zaikoB = 2000;
6
- if (round($zaikoA / 2, 0, PHP_ROUND_HALF_DOWN) > $zaikoB) {
6
+ if (intdiv($zaikoA, 2) > $zaikoB) {
7
7
  $zaikoC = $zaikoB;
8
8
  } else {
9
- $zaikoC = round($zaikoA / 2, 0, PHP_ROUND_HALF_DOWN);
9
+ $zaikoC = intdiv($zaikoA, 2);
10
10
  }
11
11
  echo $zaikoC;
12
12
  ```

3

見直し

2018/05/23 10:18

投稿

退会済みユーザー
answer CHANGED
@@ -23,6 +23,7 @@
23
23
  ['item' => 'C', 'stock' => 5000, 'requirement' => 4 ],
24
24
  ];
25
25
  echo min(array_map(function($arr) {
26
- return round($arr['stock'] / $arr['requirement'], 0, PHP_ROUND_HALF_DOWN);
26
+ return intdiv($arr['stock'], $arr['requirement']);
27
27
  }, $goods));
28
- ```
28
+ ```
29
+ (roundやめてintdivにしたら、気持ち処理時間も速まった。)

2

typo修正

2018/05/23 10:18

投稿

退会済みユーザー
answer CHANGED
@@ -18,9 +18,9 @@
18
18
  <?php
19
19
 
20
20
  $goods = [
21
- ['item' >= 'A', 'stock' => 1000, 'requirement' => 2 ],
21
+ ['item' => 'A', 'stock' => 1000, 'requirement' => 2 ],
22
- ['item' >= 'B', 'stock' => 300, 'requirement' => 1 ],
22
+ ['item' => 'B', 'stock' => 300, 'requirement' => 1 ],
23
- ['item' >= 'C', 'stock' => 5000, 'requirement' => 4 ],
23
+ ['item' => 'C', 'stock' => 5000, 'requirement' => 4 ],
24
24
  ];
25
25
  echo min(array_map(function($arr) {
26
26
  return round($arr['stock'] / $arr['requirement'], 0, PHP_ROUND_HALF_DOWN);

1

加筆修正

2018/05/23 10:09

投稿

退会済みユーザー
answer CHANGED
@@ -11,4 +11,18 @@
11
11
  echo $zaikoC;
12
12
  ```
13
13
  で、とりあえず500が求まりますね。
14
- 構成する他の商品をそれぞれセット売り用にまとめる個数で割って、一番少ない数字を採用します。
14
+ 構成する他の商品をそれぞれセット売り用にまとめる個数で割って、一番少ない数字を採用します。
15
+
16
+ ってことで、少し汎用性を広げてみると:
17
+ ```php
18
+ <?php
19
+
20
+ $goods = [
21
+ ['item' >= 'A', 'stock' => 1000, 'requirement' => 2 ],
22
+ ['item' >= 'B', 'stock' => 300, 'requirement' => 1 ],
23
+ ['item' >= 'C', 'stock' => 5000, 'requirement' => 4 ],
24
+ ];
25
+ echo min(array_map(function($arr) {
26
+ return round($arr['stock'] / $arr['requirement'], 0, PHP_ROUND_HALF_DOWN);
27
+ }, $goods));
28
+ ```