回答編集履歴

20

微修正

2018/08/31 00:49

投稿

yukihisa
yukihisa

スコア672

test CHANGED
@@ -76,6 +76,8 @@
76
76
 
77
77
  計算の結果、kan3*小さいものの金額 < 大きいものの金額+小さいものの金額の場合、小さいもの複数の方が安いためkan1で出した結果を-1し、kan2にkan3を代入する。
78
78
 
79
+ kan2*小さいものの金額 > 大きいものの金額になった場合、余りが出ても大きいものの方が安いので小さいものは使用せずにkan1に+1する。
80
+
79
81
  大きいものをkan1巻、小さいものをkan2巻が最安値になる。
80
82
 
81
83
  種類が増える場合はこれを繰り返せばいけるはず。

19

微修正

2018/08/31 00:49

投稿

yukihisa
yukihisa

スコア672

test CHANGED
@@ -72,7 +72,7 @@
72
72
 
73
73
  余りが出る長さになったら、一つ小さいものを選択する。 ⇒ kan2
74
74
 
75
- 余りが出た場合、余りの大きさによって大きいもの一巻よりも小さいもの複数の方が安くなる場合があるため、余り枚数+大きい物1当たりの枚数で計算をする。 ⇒ kan3
75
+ 余りが出た場合、余りの大きさによって大きいもの一巻よりも小さいもの複数の方が安くなる場合があるため、余り枚数+大きい物1当たりの枚数で計算をする。 ⇒ kan3
76
76
 
77
77
  計算の結果、kan3*小さいものの金額 < 大きいものの金額+小さいものの金額の場合、小さいもの複数の方が安いためkan1で出した結果を-1し、kan2にkan3を代入する。
78
78
 

18

修正

2018/08/30 02:29

投稿

yukihisa
yukihisa

スコア672

test CHANGED
@@ -50,10 +50,32 @@
50
50
 
51
51
  ### プログラミングでの表現
52
52
 
53
- とりあえず、すぐ見られるのでcodepenで作成(javascript)
53
+ とりあえず、すぐ見られるのでcodepenで作成(javascript) (8/30 修正しました。)
54
54
 
55
55
  [注文数最安値計算テスト](https://codepen.io/yukihisa/pen/ZMpRbR)
56
56
 
57
57
  レイアウト等は適当なのでご容赦を。
58
58
 
59
59
  初期値は質問で提示されているもので、エラーが起きそうなもの。テキストボックス内を自由に変更してテストできます。
60
+
61
+ ※修正前は5.5mを16枚が30x3、12x1にの計65,000円になっていました。
62
+
63
+ 修正後は30x2、12x3の計62,000円になり最安値になっております。
64
+
65
+
66
+
67
+
68
+
69
+ ### アルゴリズム。
70
+
71
+ 前提として、単価の安い大きいものから選択する。 ⇒ kan1
72
+
73
+ 余りが出る長さになったら、一つ小さいものを選択する。 ⇒ kan2
74
+
75
+ 余りが出た場合、余りの大きさによって大きいもの一巻よりも小さいもの複数の方が安くなる場合があるため、余り枚数+大きい物1枚当たりの枚数で計算をする。 ⇒ kan3
76
+
77
+ 計算の結果、kan3*小さいものの金額 < 大きいものの金額+小さいものの金額の場合、小さいもの複数の方が安いためkan1で出した結果を-1し、kan2にkan3を代入する。
78
+
79
+ 大きいものをkan1巻、小さいものをkan2巻が最安値になる。
80
+
81
+ 種類が増える場合はこれを繰り返せばいけるはず。

17

追記

2018/08/30 01:05

投稿

yukihisa
yukihisa

スコア672

test CHANGED
@@ -45,3 +45,15 @@
45
45
  追記の追記。
46
46
 
47
47
  とりあえず金額を修正した値にしました。
48
+
49
+
50
+
51
+ ### プログラミングでの表現
52
+
53
+ とりあえず、すぐ見られるのでcodepenで作成(javascript)
54
+
55
+ [注文数最安値計算テスト](https://codepen.io/yukihisa/pen/ZMpRbR)
56
+
57
+ レイアウト等は適当なのでご容赦を。
58
+
59
+ 初期値は質問で提示されているもので、エラーが起きそうなもの。テキストボックス内を自由に変更してテストできます。

16

微修正

2018/08/29 12:51

投稿

yukihisa
yukihisa

スコア672

test CHANGED
@@ -22,7 +22,7 @@
22
22
 
23
23
  ```a / (12 - 12%a) * c < 3```(12mを買ったほうが安い)の場合、12mを選んだほうが安いので、```a / (12 - 12%a) * c * 8,000```を端数切り上げで計算して金額に足す。
24
24
 
25
- 余りが25以上の場合は30mを買ったほうが安いので計算結果に19,000(30m1巻分)を足す。
25
+ ```a / (12 - 12%a) * c >= 3```の場合は30mを買ったほうが安いので計算結果に19,000(30m1巻分)を足す。
26
26
 
27
27
  という形でしょうか。
28
28
 

15

誤字の修正

2018/08/29 07:48

投稿

yukihisa
yukihisa

スコア672

test CHANGED
@@ -16,7 +16,9 @@
16
16
 
17
17
  ### 大前提として、基本的に30mのほうが安いのでそちらを使用する。
18
18
 
19
- 最初に```a * b / (30 - 30%a) * 19,000```を端数切捨てで計算し、次に```b % (30 - 30%a) / a = c```で端数分の枚数を算出する。
19
+ 最初に```a * b / (30 - 30%a) * 19,000```を端数切捨てで計算し、
20
+
21
+ 次に```b % (30 - 30%a) / a = c```で端数分の枚数を算出する。
20
22
 
21
23
  ```a / (12 - 12%a) * c < 3```(12mを買ったほうが安い)の場合、12mを選んだほうが安いので、```a / (12 - 12%a) * c * 8,000```を端数切り上げで計算して金額に足す。
22
24
 

14

誤字の修正

2018/08/29 07:47

投稿

yukihisa
yukihisa

スコア672

test CHANGED
@@ -16,7 +16,7 @@
16
16
 
17
17
  ### 大前提として、基本的に30mのほうが安いのでそちらを使用する。
18
18
 
19
- 最初に```a * b / (30 - 30%a) * 19,000```を端数切捨てで計算し、次に```b % (30 - 30%a) / a = c```で端数分の枚数を算出する。
19
+ 最初に```a * b / (30 - 30%a) * 19,000```を端数切捨てで計算し、次に```b % (30 - 30%a) / a = c```で端数分の枚数を算出する。
20
20
 
21
21
  ```a / (12 - 12%a) * c < 3```(12mを買ったほうが安い)の場合、12mを選んだほうが安いので、```a / (12 - 12%a) * c * 8,000```を端数切り上げで計算して金額に足す。
22
22
 

13

微修正

2018/08/29 07:45

投稿

yukihisa
yukihisa

スコア672

test CHANGED
@@ -10,13 +10,13 @@
10
10
 
11
11
  必要枚数を```b```とすると、金額は```a * b / (12 - 12%a) * 8,000```、```a * b / (30 - 30%a) * 19,000```(必要枚数÷1巻当たりの枚数*金額。それぞれ単体時、余ったときには別に処理しないといけないので端数切捨て)
12
12
 
13
- 端数の長さ(余り枚数×一枚あたり長さ)は```( b % (12 - 12%a) / a ) * a```、```( b % (30 - 30%a) / a ) * a```
13
+ 端数(余り枚数)は```b % (12 - 12%a) / a```、```b % (30 - 30%a) / a```
14
14
 
15
15
 
16
16
 
17
17
  ### 大前提として、基本的に30mのほうが安いのでそちらを使用する。
18
18
 
19
- 最初に```a * b / (30 - 30%a) * 19,000```を端数切捨てで計算し、次に```( b % (30 - 30%a) / a ) * a = c```で端数分の長さを算出する。
19
+ 最初に```a * b / (30 - 30%a) * 19,000```を端数切捨てで計算し、次に```b % (30 - 30%a) / a = c```で端数分の枚数を算出する。
20
20
 
21
21
  ```a / (12 - 12%a) * c < 3```(12mを買ったほうが安い)の場合、12mを選んだほうが安いので、```a / (12 - 12%a) * c * 8,000```を端数切り上げで計算して金額に足す。
22
22
 

12

金額が変わったので修正。

2018/08/29 07:19

投稿

yukihisa
yukihisa

スコア672

test CHANGED
@@ -8,7 +8,7 @@
8
8
 
9
9
  1巻あたり作成できるのが、```(12 - 12%a)/a```枚、```(30 - 30%a)/a```枚。
10
10
 
11
- 必要枚数を```b```とすると、金額は```a * b / (12 - 12%a) * 8,000```、```a * b / (30 - 30%a) * 22,000```(それぞれ単体時、端数切捨て)
11
+ 必要枚数を```b```とすると、金額は```a * b / (12 - 12%a) * 8,000```、```a * b / (30 - 30%a) * 19,000```(必要枚数÷1巻当たりの枚数*金額。それぞれ単体時、余ったときには別に処理しないといけないので端数切捨て)
12
12
 
13
13
  端数の長さ(余り枚数×一枚あたり長さ)は```( b % (12 - 12%a) / a ) * a```、```( b % (30 - 30%a) / a ) * a```
14
14
 
@@ -16,11 +16,11 @@
16
16
 
17
17
  ### 大前提として、基本的に30mのほうが安いのでそちらを使用する。
18
18
 
19
- 最初に```a * b / (30 - 30%a) * 22,000```を端数切捨てで計算し、次に```( b % (30 - 30%a) / a ) * a = c```で端数分の長さを算出する。
19
+ 最初に```a * b / (30 - 30%a) * 19,000```を端数切捨てで計算し、次に```( b % (30 - 30%a) / a ) * a = c```で端数分の長さを算出する。
20
20
 
21
21
  ```a / (12 - 12%a) * c < 3```(12mを買ったほうが安い)の場合、12mを選んだほうが安いので、```a / (12 - 12%a) * c * 8,000```を端数切り上げで計算して金額に足す。
22
22
 
23
- 余りが25以上の場合は計算結果に22,000(30m1巻分)を足す。
23
+ 余りが25以上の場合は30mを買ったほうが安いので計算結果に19,000(30m1巻分)を足す。
24
24
 
25
25
  という形でしょうか。
26
26
 
@@ -37,3 +37,9 @@
37
37
  割引率によって```(30*30mの単価/12mの単価)m```未満かどうか切り分けないといけない(たとえば3割引なら21m未満)ですね、失礼しました。
38
38
 
39
39
  さらにその中できちんと何巻取れるか計算しなきゃいけないですね。
40
+
41
+
42
+
43
+ 追記の追記。
44
+
45
+ とりあえず金額を修正した値にしました。

11

微修正

2018/08/29 06:34

投稿

yukihisa
yukihisa

スコア672

test CHANGED
@@ -16,13 +16,11 @@
16
16
 
17
17
  ### 大前提として、基本的に30mのほうが安いのでそちらを使用する。
18
18
 
19
- 最初に```a * b / (30 - 30%a) * 22,000```を端数切捨てで計算し、次に```( b % (30 - 30%a) / a ) * a```で端数分の長さを算出する。
19
+ 最初に```a * b / (30 - 30%a) * 22,000```を端数切捨てで計算し、次に```( b % (30 - 30%a) / a ) * a = c```で端数分の長さを算出する。
20
20
 
21
+ ```a / (12 - 12%a) * c < 3```(12mを買ったほうが安い)の場合、12mを選んだほうが安いので、```a / (12 - 12%a) * c * 8,000```を端数切り上げで計算して金額に足す。
21
22
 
22
-
23
- 端数分の長さが1以上且つ~~25未満~~(30*30mの単価/12mの単価)未満の場合、12mを選んだほうが安いので、```a / (12 - 12%a) * ( b % a * (30 - 30%a) ) * 8,000```を端数切り上げで計算して金額に足す。
24
-
25
- 余りが~~25~~(30*30mの単価/12mの単価)以上の場合は計算結果に22,000(30m1巻分)を足す。
23
+ 余りが25以上の場合は計算結果に22,000(30m1巻分)を足す。
26
24
 
27
25
  という形でしょうか。
28
26
 
@@ -37,3 +35,5 @@
37
35
  割引率を良く見ていなかった。。。
38
36
 
39
37
  割引率によって```(30*30mの単価/12mの単価)m```未満かどうか切り分けないといけない(たとえば3割引なら21m未満)ですね、失礼しました。
38
+
39
+ さらにその中できちんと何巻取れるか計算しなきゃいけないですね。

10

微修正

2018/08/29 06:03

投稿

yukihisa
yukihisa

スコア672

test CHANGED
@@ -22,7 +22,7 @@
22
22
 
23
23
  端数分の長さが1以上且つ~~25未満~~(30*30mの単価/12mの単価)未満の場合、12mを選んだほうが安いので、```a / (12 - 12%a) * ( b % a * (30 - 30%a) ) * 8,000```を端数切り上げで計算して金額に足す。
24
24
 
25
- 余りが25以上の場合は計算結果に22,000(30m1巻分)を足す。
25
+ 余りが~~25~~(30*30mの単価/12mの単価)以上の場合は計算結果に22,000(30m1巻分)を足す。
26
26
 
27
27
  という形でしょうか。
28
28
 

9

微修正

2018/08/29 05:17

投稿

yukihisa
yukihisa

スコア672

test CHANGED
@@ -20,7 +20,7 @@
20
20
 
21
21
 
22
22
 
23
- 端数分の長さが1以上且つ~~25未満~~30*(1-割引率)未満の場合、12mを選んだほうが安いので、```a / (12 - 12%a) * ( b % a * (30 - 30%a) ) * 8,000```を端数切り上げで計算して金額に足す。
23
+ 端数分の長さが1以上且つ~~25未満~~30*30mの単価/12mの単価)未満の場合、12mを選んだほうが安いので、```a / (12 - 12%a) * ( b % a * (30 - 30%a) ) * 8,000```を端数切り上げで計算して金額に足す。
24
24
 
25
25
  余りが25以上の場合は計算結果に22,000(30m1巻分)を足す。
26
26
 
@@ -36,4 +36,4 @@
36
36
 
37
37
  割引率を良く見ていなかった。。。
38
38
 
39
- 割引率によって```30*(1-割引率)m```未満かどうか切り分けないといけない(たとえば3割引なら21m未満)ですね、失礼しました。
39
+ 割引率によって```30*30mの単価/12の単価)m```未満かどうか切り分けないといけない(たとえば3割引なら21m未満)ですね、失礼しました。

8

微修正

2018/08/29 05:10

投稿

yukihisa
yukihisa

スコア672

test CHANGED
@@ -18,7 +18,9 @@
18
18
 
19
19
  最初に```a * b / (30 - 30%a) * 22,000```を端数切捨てで計算し、次に```( b % (30 - 30%a) / a ) * a```で端数分の長さを算出する。
20
20
 
21
+
22
+
21
- 端数分の長さが1以上且つ25未満の場合、12mを選んだほうが安いので、```a / (12 - 12%a) * ( b % a * (30 - 30%a) ) * 8,000```を端数切り上げで計算して金額に足す。
23
+ 端数分の長さが1以上且つ~~25未満~~30*(1-割引率)未満の場合、12mを選んだほうが安いので、```a / (12 - 12%a) * ( b % a * (30 - 30%a) ) * 8,000```を端数切り上げで計算して金額に足す。
22
24
 
23
25
  余りが25以上の場合は計算結果に22,000(30m1巻分)を足す。
24
26
 

7

補足

2018/08/29 05:03

投稿

yukihisa
yukihisa

スコア672

test CHANGED
@@ -27,3 +27,11 @@
27
27
 
28
28
 
29
29
  んー、表現の仕方が難しい。
30
+
31
+
32
+
33
+ ### 追記
34
+
35
+ 割引率を良く見ていなかった。。。
36
+
37
+ 割引率によって```30*(1-割引率)m```未満かどうか切り分けないといけない(たとえば3割引なら21m未満)ですね、失礼しました。

6

誤字の修正

2018/08/29 04:57

投稿

yukihisa
yukihisa

スコア672

test CHANGED
@@ -10,7 +10,7 @@
10
10
 
11
11
  必要枚数を```b```とすると、金額は```a * b / (12 - 12%a) * 8,000```、```a * b / (30 - 30%a) * 22,000```(それぞれ単体時、端数切捨て)
12
12
 
13
- 端数の長さ(余り枚数×一枚あたり長さ)は```( b % (12 - 12%a) ) / a ) * a```、```( b % (30 - 30%a) ) / a ) * a```
13
+ 端数の長さ(余り枚数×一枚あたり長さ)は```( b % (12 - 12%a) / a ) * a```、```( b % (30 - 30%a) / a ) * a```
14
14
 
15
15
 
16
16
 

5

微修正

2018/08/29 03:57

投稿

yukihisa
yukihisa

スコア672

test CHANGED
@@ -8,7 +8,7 @@
8
8
 
9
9
  1巻あたり作成できるのが、```(12 - 12%a)/a```枚、```(30 - 30%a)/a```枚。
10
10
 
11
- 必要枚数を```b```とすると、金額は```round(a * b / (12 - 12%a)) * 8,000```、```round(a * b / (30 - 30%a)) * 22,000```(それぞれ単体時、端数切捨て)
11
+ 必要枚数を```b```とすると、金額は```a * b / (12 - 12%a) * 8,000```、```a * b / (30 - 30%a) * 22,000```(それぞれ単体時、端数切捨て)
12
12
 
13
13
  端数の長さ(余り枚数×一枚あたり長さ)は```( b % (12 - 12%a) ) / a ) * a```、```( b % (30 - 30%a) ) / a ) * a```
14
14
 
@@ -16,10 +16,14 @@
16
16
 
17
17
  ### 大前提として、基本的に30mのほうが安いのでそちらを使用する。
18
18
 
19
- 最初に```round(a * b / (30 - 30%a)) * 22,000```を端数切捨てで計算し、次に```( b % (30 - 30%a) / a ) * a```で端数分の長さを算出する。
19
+ 最初に```a * b / (30 - 30%a) * 22,000```を端数切捨てで計算し、次に```( b % (30 - 30%a) / a ) * a```で端数分の長さを算出する。
20
20
 
21
- 端数分の長さが1以上且つ25未満の場合、12mを選んだほうが安いので、```round(a / (12 - 12%a) * ( b % a * (30 - 30%a) )) * 8,000```を端数切り上げで計算して金額に足す。
21
+ 端数分の長さが1以上且つ25未満の場合、12mを選んだほうが安いので、```a / (12 - 12%a) * ( b % a * (30 - 30%a) ) * 8,000```を端数切り上げで計算して金額に足す。
22
22
 
23
- 余りが25以上の場合は計算結果に22,000(30m1巻分)を足す。
23
+ 余りが25以上の場合は計算結果に22,000(30m1巻分)を足す。
24
24
 
25
25
  という形でしょうか。
26
+
27
+
28
+
29
+ んー、表現の仕方が難しい。

4

微修正

2018/08/29 03:54

投稿

yukihisa
yukihisa

スコア672

test CHANGED
@@ -14,7 +14,7 @@
14
14
 
15
15
 
16
16
 
17
- 大前提として、基本的に30mのほうが安いのでそちらを使用する。
17
+ ### 大前提として、基本的に30mのほうが安いのでそちらを使用する。
18
18
 
19
19
  最初に```round(a * b / (30 - 30%a)) * 22,000```を端数切捨てで計算し、次に```( b % (30 - 30%a) / a ) * a```で端数分の長さを算出する。
20
20
 

3

修正

2018/08/29 03:53

投稿

yukihisa
yukihisa

スコア672

test CHANGED
@@ -1 +1,25 @@
1
+ ### まず数式化
2
+
3
+ 必要な長さを```a```とすると
4
+
5
+ 1巻ごとの余りの長さはそれぞれ```12%a```m、```30%a```m
6
+
7
+ これが1巻ごとに無駄になるので、実際使える長さはそれぞれ```12 - 12%a```m、```30 - 30%a```m
8
+
9
+ 1巻あたり作成できるのが、```(12 - 12%a)/a```枚、```(30 - 30%a)/a```枚。
10
+
11
+ 必要枚数を```b```とすると、金額は```round(a * b / (12 - 12%a)) * 8,000```、```round(a * b / (30 - 30%a)) * 22,000```(それぞれ単体時、端数切捨て)
12
+
13
+ 端数の長さ(余り枚数×一枚あたり長さ)は```( b % (12 - 12%a) ) / a ) * a```、```( b % (30 - 30%a) ) / a ) * a```
14
+
15
+
16
+
17
+ 大前提として、基本的に30mのほうが安いのでそちらを使用する。
18
+
19
+ 最初に```round(a * b / (30 - 30%a)) * 22,000```を端数切捨てで計算し、次に```( b % (30 - 30%a) / a ) * a```で端数分の長さを算出する。
20
+
21
+ 端数分の長さが1以上且つ25未満の場合、12mを選んだほうが安いので、```round(a / (12 - 12%a) * ( b % a * (30 - 30%a) )) * 8,000```を端数切り上げで計算して金額に足す。
22
+
23
+ 余りが25以上の場合は計算結果に22,000(30m1巻き分)を足す。
24
+
1
- 修正ます、少々お待ちを
25
+ という形でょうか

2

微修正

2018/08/29 03:51

投稿

yukihisa
yukihisa

スコア672

test CHANGED
@@ -1,9 +1 @@
1
- 必要な長さを```a```とすると
2
-
3
- 余りの長さはそれぞれ```12%a```m、```30%a```m
4
-
5
- これが1巻ごとに無駄になるので、実際使える長さはそれぞれ```12 - 12%a```m、```30 - 30%a```m
6
-
7
- 必要巻数はこれを必要な枚数```b```で割ればいいので金額はそれぞれ```(12 - 12%a)/b * 8,000```、```(30 - 30%a)/b * 22,000```(端数は切り上げてね)となります。
8
-
9
- 結果を比較て小さい方採用するのがいいかと
1
+ 修正ます、少々お待ちを。

1

微修正

2018/08/29 03:03

投稿

yukihisa
yukihisa

スコア672

test CHANGED
@@ -4,6 +4,6 @@
4
4
 
5
5
  これが1巻ごとに無駄になるので、実際使える長さはそれぞれ```12 - 12%a```m、```30 - 30%a```m
6
6
 
7
- 必要巻数はこれを必要な枚数```b```で割ればいいので金額はそれぞれ```(12 - 12%a)/b * 8,000```、```(30 - 30%a)/b * 22,000```(端数は切りね)となります。
7
+ 必要巻数はこれを必要な枚数```b```で割ればいいので金額はそれぞれ```(12 - 12%a)/b * 8,000```、```(30 - 30%a)/b * 22,000```(端数は切り上げてね)となります。
8
8
 
9
9
  結果を比較して小さい方を採用するのがいいかと。