回答編集履歴

5

小数点対応、例題4パターン全て出力可能

2018/08/29 11:16

投稿

opyon
opyon

スコア1009

test CHANGED
@@ -1,12 +1,10 @@
1
- 作り直しの途中ですが取り急ぎ更新します。
2
-
3
- 複数の組み合わせを実装しました。
1
+ 複数の組み合わせ及び小数点対応しました。
4
2
 
5
3
  出力結果はコード内のコメントに残してます。
6
4
 
7
- ※整数のみ対応
8
-
9
- ※小数点の長さは修正中
5
+ 例題全4パターン出力可能です。
6
+
7
+ //5x5//5x7//18x2//5.5x20
10
8
 
11
9
 
12
10
 
@@ -78,6 +76,8 @@
78
76
 
79
77
  //18x2
80
78
 
79
+ //5.5x20
80
+
81
81
 
82
82
 
83
83
  // 5m x 5枚必要
@@ -106,6 +106,368 @@
106
106
 
107
107
 
108
108
 
109
+ // 5.5m x 20枚必要
110
+
111
+ // 12m巻 x 2ロール = 16000円
112
+
113
+ // 30m巻 x 3ロール = 57000円
114
+
115
+ // 最安値総計73000円
116
+
117
+
118
+
119
+ double a = 18;
120
+
121
+ int b = 2;
122
+
123
+ double c = a * b;
124
+
125
+
126
+
127
+ int[] d = { 12, 30 };
128
+
129
+ int[] e = { 8000, 19000 };
130
+
131
+
132
+
133
+ int[] ans = func(a, b, c, d, e);
134
+
135
+ int sum = 0;
136
+
137
+
138
+
139
+ System.out.println(a + "m x " + b + "枚必要");
140
+
141
+ for (int i = 0; i < ans.length; i++) {
142
+
143
+ if (ans[i] != 0) {
144
+
145
+ sum += ans[i] * e[i];
146
+
147
+ System.out.println(d[i] + "m巻 x " + ans[i] + "ロール = " + ans[i] * e[i] + "円");
148
+
149
+ }
150
+
151
+ }
152
+
153
+ System.out.println(" 最安値総計" + sum + "円");
154
+
155
+ }
156
+
157
+
158
+
159
+ static int[] func(double a, int b, double c, int[] d, int[] e) {
160
+
161
+
162
+
163
+ int n = d.length;
164
+
165
+ int x;
166
+
167
+ int[] result = new int[n];
168
+
169
+ int[][] chk1 = new int[n][2];
170
+
171
+
172
+
173
+ //最安値単価の商品IDを取得=f
174
+
175
+ int f = 0;
176
+
177
+ for (int i = 0; i < d.length - 1; i++) {
178
+
179
+ if (e[i] / d[i] < e[i + 1] / d[i + 1]) {
180
+
181
+ f = i;
182
+
183
+ } else {
184
+
185
+ f = i + 1;
186
+
187
+ }
188
+
189
+ }
190
+
191
+
192
+
193
+ //最安値単価の商品=fで端数が出るまでまかなう
194
+
195
+ result[f] = (int) (c / ((d[f] / (int) a) * a));
196
+
197
+
198
+
199
+ //残り長さを端数で更新
200
+
201
+ // c = c % d[f];
202
+
203
+
204
+
205
+ c -= result[f] * d[f];
206
+
207
+
208
+
209
+ if(c<0) {
210
+
211
+ return result;
212
+
213
+ }
214
+
215
+
216
+
217
+ //d0 //d1
218
+
219
+ //12 //30
220
+
221
+ //a5 b5
222
+
223
+ //c25
224
+
225
+
226
+
227
+ //d0 //d1
228
+
229
+ //12 //30
230
+
231
+ //a5 b7
232
+
233
+ //c35
234
+
235
+
236
+
237
+ //d0 //d1
238
+
239
+ //12 //30
240
+
241
+ //a18 b2
242
+
243
+ //c36
244
+
245
+
246
+
247
+ //d0 //d1
248
+
249
+ //12 //30
250
+
251
+ //a5.5 b20
252
+
253
+ //c110.0
254
+
255
+
256
+
257
+ //30/5.5=5
258
+
259
+
260
+
261
+ for (int i = 0; i < n; i++) {
262
+
263
+
264
+
265
+ if (d[i] < a) {
266
+
267
+ continue;
268
+
269
+ }
270
+
271
+
272
+
273
+ if (d[i] > c) {
274
+
275
+ chk1[i][0] = 1;
276
+
277
+ chk1[i][1] = e[i];
278
+
279
+ } else {
280
+
281
+ x = (int) Math.ceil(1.0 * c / d[i]);
282
+
283
+ chk1[i][0] = x;
284
+
285
+ chk1[i][1] = e[i] * x;
286
+
287
+ }
288
+
289
+ }
290
+
291
+
292
+
293
+ int ans = 0;
294
+
295
+ for (int i = 0; i < n - 1; i++) {
296
+
297
+
298
+
299
+ if (chk1[i][1] == 0) {
300
+
301
+ ans = i + 1;
302
+
303
+ continue;
304
+
305
+ }
306
+
307
+
308
+
309
+ if (chk1[i][1] < chk1[i + 1][1]) {
310
+
311
+ ans = i;
312
+
313
+ } else {
314
+
315
+ ans = i + 1;
316
+
317
+ }
318
+
319
+ }
320
+
321
+
322
+
323
+ result[ans] += chk1[ans][0];
324
+
325
+ return result;
326
+
327
+ }
328
+
329
+ }
330
+
331
+
332
+
333
+ ```
334
+
335
+ ※以下初回分ですがコメント頂いているので残してます。
336
+
337
+ ---
338
+
339
+ ```java
340
+
341
+ 言語が何か分からないので自分の勉強のために例題としてjavaで実装してみました。
342
+
343
+ if文とfor文くらいしか使ってないですが何かの参考になればと思います。
344
+
345
+ 5x5と5x7のケースしかテストしていません。
346
+
347
+
348
+
349
+ ---
350
+
351
+
352
+
353
+ 出力結果
354
+
355
+
356
+
357
+ 5m x 5枚必要
358
+
359
+
360
+
361
+ 1種類でまかなう場合
362
+
363
+ 12m巻 x 3ロール = 24000円
364
+
365
+ 30m巻 x 1ロール = 22000円
366
+
367
+ 60m巻 x 1ロール = 40000円
368
+
369
+
370
+
371
+
372
+
373
+ 複数で組み合わせる場合
374
+
375
+ 12m巻 x 3ロール = 24000円
376
+
377
+ 総計24000円
378
+
379
+
380
+
381
+ ---
382
+
383
+ 5m x 7枚必要
384
+
385
+
386
+
387
+ 1種類でまかなう場合
388
+
389
+ 12m巻 x 3ロール = 24000円
390
+
391
+ 30m巻 x 2ロール = 44000円
392
+
393
+ 60m巻 x 1ロール = 40000円
394
+
395
+
396
+
397
+
398
+
399
+ 複数で組み合わせる場合
400
+
401
+ 30m巻 x 1ロール = 22000円
402
+
403
+ 12m巻 x 1ロール = 8000円
404
+
405
+ 総計30000円
406
+
407
+
408
+
409
+ public class memo102 {
410
+
411
+
412
+
413
+ // 長さ5mを5枚必要な場合
414
+
415
+ // パターン① 12m巻でまかなうと、3ロール必要、8,000円x3ロール=24,000円
416
+
417
+ // パターン② 30m巻でまかなうと、1ロール必要、22,000円x1ロール=22,000円
418
+
419
+ //
420
+
421
+ // この場合は、パターン②の30m巻を1ロール購入するのが正解です。
422
+
423
+ //
424
+
425
+ // 長さ5mを7枚必要な場合
426
+
427
+ // パターン① 12m巻のみでまかなうと、4ロール必要、8,000円x4ロール=32,000円
428
+
429
+ // パターン② 30m巻のみでまかなうと、2ロール必要、22,000円x2ロール=44,000円
430
+
431
+ // パターン③ 30m巻と12m巻でまかなうと、30m巻1ロール、12m巻1ロール= 8,000円+22,000円=30,000円
432
+
433
+ //
434
+
435
+ // この場合は、パターン③の30mと12mを組み合わせるパターンが最も安くなります。
436
+
437
+
438
+
439
+ public static void main(String[] args) {
440
+
441
+
442
+
443
+ // a b c
444
+
445
+ // a=必要長さ (m)
446
+
447
+ // b=必要枚数 (枚)
448
+
449
+ // c=a*b=合計長さ (m)
450
+
451
+ //
452
+
453
+ // d e
454
+
455
+ // d=ロール (m)
456
+
457
+ // e=単価 (円)
458
+
459
+
460
+
461
+ //例題
462
+
463
+ //5x5
464
+
465
+ //5x7
466
+
467
+ //18x2
468
+
469
+
470
+
109
471
  int a = 18;
110
472
 
111
473
  int b = 2;
@@ -114,498 +476,172 @@
114
476
 
115
477
 
116
478
 
117
- int[] d = { 12, 30 };
479
+ int[] d = { 12, 30, 60 };
118
-
480
+
119
- int[] e = { 8000, 19000 };
481
+ int[] e = { 8000, 22000, 40000 };
120
-
121
-
122
-
482
+
483
+
484
+
123
- int[] ans = func(a, b, c, d, e);
485
+ func(a, b, c, d, e);
486
+
487
+
488
+
124
-
489
+ }
490
+
491
+
492
+
493
+ static void func(int a, int b, int c, int[] d, int[] e) {
494
+
125
- int sum = 0;
495
+ int sum;
496
+
497
+ int x;
126
498
 
127
499
 
128
500
 
129
501
  System.out.println(a + "m x " + b + "枚必要");
130
502
 
503
+ System.out.println();
504
+
505
+ System.out.println("1種類でまかなう場合");
506
+
507
+
508
+
509
+ //1種類でまかなう
510
+
131
- for (int i = 0; i < ans.length; i++) {
511
+ for (int i = 0; i < d.length; i++) {
512
+
132
-
513
+ sum = 0;
514
+
515
+ x = 0;
516
+
517
+
518
+
519
+ //追記
520
+
133
- if (ans[i] != 0) {
521
+ if(d[i]<a) {
134
-
522
+
135
- sum += ans[i] * e[i];
523
+ continue;
136
-
137
- System.out.println(d[i] + "m巻 x " + ans[i] + "ロール = " + ans[i] * e[i] + "円");
524
+
138
-
139
- }
525
+ }
526
+
527
+
528
+
140
-
529
+ if (d[i] >= c) {
530
+
531
+ x = (int) Math.ceil(c * 1.0 / d[i]);
532
+
533
+ sum = x * e[i];
534
+
535
+ System.out.println(d[i] + "m巻 x " + x + "ロール = " + sum + "円");
536
+
537
+ } else {
538
+
539
+
540
+
541
+ x = (int) Math.ceil(c * 1.0 / d[i]);
542
+
543
+ sum = x * e[i];
544
+
545
+ System.out.println(d[i] + "m巻 x " + x + "ロール = " + sum + "円");
546
+
141
- }
547
+ }
548
+
142
-
549
+ }
550
+
551
+
552
+
553
+ System.out.println();
554
+
555
+ System.out.println();
556
+
557
+ System.out.println("複数で組み合わせる場合");
558
+
559
+
560
+
561
+ //複数で組み合わせる場合
562
+
563
+ sum = 0;
564
+
565
+ x = 0;
566
+
567
+ int tmp[] = new int[d.length];
568
+
569
+
570
+
571
+ for (int j = d.length - 1; j >= 0; j--) {
572
+
573
+
574
+
575
+ if (d[j] >= c && j != 0) {
576
+
577
+ continue;
578
+
579
+ }
580
+
581
+
582
+
583
+ if(d[j]<a) {
584
+
585
+ continue;
586
+
587
+ }
588
+
589
+
590
+
591
+
592
+
593
+ while (c > 0) {
594
+
595
+ c = c - d[j];
596
+
597
+ sum += e[j];
598
+
599
+ tmp[j]++;
600
+
601
+
602
+
603
+ if (c - d[j] < 0 && j != 0) {
604
+
605
+
606
+
607
+ //追記
608
+
609
+ if(d[j-1]<a) {
610
+
611
+ sum += e[j];
612
+
613
+ tmp[j]++;
614
+
615
+ }
616
+
617
+
618
+
619
+ break;
620
+
621
+ }
622
+
623
+ }
624
+
625
+ }
626
+
627
+
628
+
629
+ for (int i = d.length - 1; i >= 0; i--) {
630
+
631
+ if (tmp[i] != 0) {
632
+
633
+ System.out.println(d[i] + "m巻 x " + tmp[i] + "ロール = " + tmp[i] * e[i] + "円");
634
+
635
+ }
636
+
637
+ }
638
+
143
- System.out.println(" 最安値総計" + sum + "円");
639
+ System.out.println(" 総計" + sum + "円");
144
640
 
145
641
  }
146
642
 
147
-
148
-
149
- static int[] func(int a, int b, int c, int[] d, int[] e) {
150
-
151
-
152
-
153
- int n = d.length;
154
-
155
- int x;
156
-
157
- int sum;
158
-
159
- int[] result = new int[n];
160
-
161
- int[][] chk1 = new int[n][2];
162
-
163
-
164
-
165
- //最安値単価の商品IDを取得=f
166
-
167
- int f = 0;
168
-
169
- for (int i = 0; i < d.length - 1; i++) {
170
-
171
- if (e[i] / d[i] < e[i + 1] / d[i + 1]) {
172
-
173
- f = i;
174
-
175
- } else {
176
-
177
- f = i + 1;
178
-
179
- }
180
-
181
- }
182
-
183
-
184
-
185
- //最安値単価の商品=fで端数が出るまでまかなう
186
-
187
- result[f] = c / d[f];
188
-
189
-
190
-
191
- //残り長さを端数で更新
192
-
193
- c = c % d[f];
194
-
195
-
196
-
197
- //d0 //d1
198
-
199
- //12 //30
200
-
201
- //a5 b5
202
-
203
- //c25
204
-
205
-
206
-
207
- //d0 //d1
208
-
209
- //12 //30
210
-
211
- //a5 b7
212
-
213
- //c35
214
-
215
-
216
-
217
- //d0 //d1
218
-
219
- //12 //30
220
-
221
- //a18 b2
222
-
223
- //c36
224
-
225
-
226
-
227
- for (int i = 0; i < n; i++) {
228
-
229
-
230
-
231
- if (d[i] < a) {
232
-
233
- continue;
234
-
235
- }
236
-
237
-
238
-
239
- if (d[i] > c) {
240
-
241
- chk1[i][0] = 1;
242
-
243
- chk1[i][1] = e[i];
244
-
245
- } else {
246
-
247
- x = (int) Math.ceil(1.0 * b / (d[i] / a));
248
-
249
- chk1[i][0] = x;
250
-
251
- chk1[i][1] = e[i] * x;
252
-
253
- }
254
-
255
- }
256
-
257
-
258
-
259
- int ans = 0;
260
-
261
- for (int i = 0; i < n - 1; i++) {
262
-
263
-
264
-
265
- if (chk1[i][1] == 0) {
266
-
267
- ans = i + 1;
268
-
269
- continue;
270
-
271
- }
272
-
273
-
274
-
275
- if (chk1[i][1] < chk1[i + 1][1]) {
276
-
277
- ans = i;
278
-
279
- } else {
280
-
281
- ans = i + 1;
282
-
283
- }
284
-
285
- }
286
-
287
-
288
-
289
- result[ans] += chk1[ans][0];
290
-
291
- return result;
292
-
293
- }
294
-
295
643
  }
296
644
 
645
+
646
+
297
647
  ```
298
-
299
- ※以下初回分ですがコメント頂いているので残してます。
300
-
301
- ---
302
-
303
- ```java
304
-
305
- 言語が何か分からないので自分の勉強のために例題としてjavaで実装してみました。
306
-
307
- if文とfor文くらいしか使ってないですが何かの参考になればと思います。
308
-
309
- 5x5と5x7のケースしかテストしていません。
310
-
311
-
312
-
313
- ---
314
-
315
-
316
-
317
- 出力結果
318
-
319
-
320
-
321
- 5m x 5枚必要
322
-
323
-
324
-
325
- 1種類でまかなう場合
326
-
327
- 12m巻 x 3ロール = 24000円
328
-
329
- 30m巻 x 1ロール = 22000円
330
-
331
- 60m巻 x 1ロール = 40000円
332
-
333
-
334
-
335
-
336
-
337
- 複数で組み合わせる場合
338
-
339
- 12m巻 x 3ロール = 24000円
340
-
341
- 総計24000円
342
-
343
-
344
-
345
- ---
346
-
347
- 5m x 7枚必要
348
-
349
-
350
-
351
- 1種類でまかなう場合
352
-
353
- 12m巻 x 3ロール = 24000円
354
-
355
- 30m巻 x 2ロール = 44000円
356
-
357
- 60m巻 x 1ロール = 40000円
358
-
359
-
360
-
361
-
362
-
363
- 複数で組み合わせる場合
364
-
365
- 30m巻 x 1ロール = 22000円
366
-
367
- 12m巻 x 1ロール = 8000円
368
-
369
- 総計30000円
370
-
371
-
372
-
373
- public class memo102 {
374
-
375
-
376
-
377
- // 長さ5mを5枚必要な場合
378
-
379
- // パターン① 12m巻でまかなうと、3ロール必要、8,000円x3ロール=24,000円
380
-
381
- // パターン② 30m巻でまかなうと、1ロール必要、22,000円x1ロール=22,000円
382
-
383
- //
384
-
385
- // この場合は、パターン②の30m巻を1ロール購入するのが正解です。
386
-
387
- //
388
-
389
- // 長さ5mを7枚必要な場合
390
-
391
- // パターン① 12m巻のみでまかなうと、4ロール必要、8,000円x4ロール=32,000円
392
-
393
- // パターン② 30m巻のみでまかなうと、2ロール必要、22,000円x2ロール=44,000円
394
-
395
- // パターン③ 30m巻と12m巻でまかなうと、30m巻1ロール、12m巻1ロール= 8,000円+22,000円=30,000円
396
-
397
- //
398
-
399
- // この場合は、パターン③の30mと12mを組み合わせるパターンが最も安くなります。
400
-
401
-
402
-
403
- public static void main(String[] args) {
404
-
405
-
406
-
407
- // a b c
408
-
409
- // a=必要長さ (m)
410
-
411
- // b=必要枚数 (枚)
412
-
413
- // c=a*b=合計長さ (m)
414
-
415
- //
416
-
417
- // d e
418
-
419
- // d=ロール (m)
420
-
421
- // e=単価 (円)
422
-
423
-
424
-
425
- //例題
426
-
427
- //5x5
428
-
429
- //5x7
430
-
431
- //18x2
432
-
433
-
434
-
435
- int a = 18;
436
-
437
- int b = 2;
438
-
439
- int c = a * b;
440
-
441
-
442
-
443
- int[] d = { 12, 30, 60 };
444
-
445
- int[] e = { 8000, 22000, 40000 };
446
-
447
-
448
-
449
- func(a, b, c, d, e);
450
-
451
-
452
-
453
- }
454
-
455
-
456
-
457
- static void func(int a, int b, int c, int[] d, int[] e) {
458
-
459
- int sum;
460
-
461
- int x;
462
-
463
-
464
-
465
- System.out.println(a + "m x " + b + "枚必要");
466
-
467
- System.out.println();
468
-
469
- System.out.println("1種類でまかなう場合");
470
-
471
-
472
-
473
- //1種類でまかなう
474
-
475
- for (int i = 0; i < d.length; i++) {
476
-
477
- sum = 0;
478
-
479
- x = 0;
480
-
481
-
482
-
483
- //追記
484
-
485
- if(d[i]<a) {
486
-
487
- continue;
488
-
489
- }
490
-
491
-
492
-
493
- if (d[i] >= c) {
494
-
495
- x = (int) Math.ceil(c * 1.0 / d[i]);
496
-
497
- sum = x * e[i];
498
-
499
- System.out.println(d[i] + "m巻 x " + x + "ロール = " + sum + "円");
500
-
501
- } else {
502
-
503
-
504
-
505
- x = (int) Math.ceil(c * 1.0 / d[i]);
506
-
507
- sum = x * e[i];
508
-
509
- System.out.println(d[i] + "m巻 x " + x + "ロール = " + sum + "円");
510
-
511
- }
512
-
513
- }
514
-
515
-
516
-
517
- System.out.println();
518
-
519
- System.out.println();
520
-
521
- System.out.println("複数で組み合わせる場合");
522
-
523
-
524
-
525
- //複数で組み合わせる場合
526
-
527
- sum = 0;
528
-
529
- x = 0;
530
-
531
- int tmp[] = new int[d.length];
532
-
533
-
534
-
535
- for (int j = d.length - 1; j >= 0; j--) {
536
-
537
-
538
-
539
- if (d[j] >= c && j != 0) {
540
-
541
- continue;
542
-
543
- }
544
-
545
-
546
-
547
- if(d[j]<a) {
548
-
549
- continue;
550
-
551
- }
552
-
553
-
554
-
555
-
556
-
557
- while (c > 0) {
558
-
559
- c = c - d[j];
560
-
561
- sum += e[j];
562
-
563
- tmp[j]++;
564
-
565
-
566
-
567
- if (c - d[j] < 0 && j != 0) {
568
-
569
-
570
-
571
- //追記
572
-
573
- if(d[j-1]<a) {
574
-
575
- sum += e[j];
576
-
577
- tmp[j]++;
578
-
579
- }
580
-
581
-
582
-
583
- break;
584
-
585
- }
586
-
587
- }
588
-
589
- }
590
-
591
-
592
-
593
- for (int i = d.length - 1; i >= 0; i--) {
594
-
595
- if (tmp[i] != 0) {
596
-
597
- System.out.println(d[i] + "m巻 x " + tmp[i] + "ロール = " + tmp[i] * e[i] + "円");
598
-
599
- }
600
-
601
- }
602
-
603
- System.out.println(" 総計" + sum + "円");
604
-
605
- }
606
-
607
- }
608
-
609
-
610
-
611
- ```

4

複数の組み合わせの場合に対応

2018/08/29 11:16

投稿

opyon
opyon

スコア1009

test CHANGED
@@ -1,9 +1,13 @@
1
- 作り直しの途中ですが取り急ぎ時間がないので更新します。
1
+ 作り直しの途中ですが取り急ぎ更新します。
2
-
2
+
3
- 複数の組み合わせは未実装。
3
+ 複数の組み合わせ実装しました
4
4
 
5
5
  出力結果はコード内のコメントに残してます。
6
6
 
7
+ ※整数のみ対応
8
+
9
+ ※小数点の長さは修正中
10
+
7
11
 
8
12
 
9
13
  ```java
@@ -86,9 +90,11 @@
86
90
 
87
91
  // 5m x 7枚必要
88
92
 
89
- // 12m巻 x 4ロール = 32000円
93
+ // 12m巻 x 1ロール = 8000円
94
+
90
-
95
+ // 30m巻 x 1ロール = 19000円
96
+
91
- // 最安値総計32000円
97
+ // 最安値総計27000円
92
98
 
93
99
 
94
100
 
@@ -146,51 +152,337 @@
146
152
 
147
153
  int n = d.length;
148
154
 
155
+ int x;
156
+
157
+ int sum;
158
+
149
159
  int[] result = new int[n];
150
160
 
161
+ int[][] chk1 = new int[n][2];
162
+
163
+
164
+
165
+ //最安値単価の商品IDを取得=f
166
+
167
+ int f = 0;
168
+
169
+ for (int i = 0; i < d.length - 1; i++) {
170
+
171
+ if (e[i] / d[i] < e[i + 1] / d[i + 1]) {
172
+
173
+ f = i;
174
+
175
+ } else {
176
+
177
+ f = i + 1;
178
+
179
+ }
180
+
181
+ }
182
+
183
+
184
+
185
+ //最安値単価の商品=fで端数が出るまでまかなう
186
+
187
+ result[f] = c / d[f];
188
+
189
+
190
+
191
+ //残り長さを端数で更新
192
+
193
+ c = c % d[f];
194
+
195
+
196
+
197
+ //d0 //d1
198
+
199
+ //12 //30
200
+
201
+ //a5 b5
202
+
203
+ //c25
204
+
205
+
206
+
207
+ //d0 //d1
208
+
209
+ //12 //30
210
+
211
+ //a5 b7
212
+
213
+ //c35
214
+
215
+
216
+
217
+ //d0 //d1
218
+
219
+ //12 //30
220
+
221
+ //a18 b2
222
+
223
+ //c36
224
+
225
+
226
+
227
+ for (int i = 0; i < n; i++) {
228
+
229
+
230
+
231
+ if (d[i] < a) {
232
+
233
+ continue;
234
+
235
+ }
236
+
237
+
238
+
239
+ if (d[i] > c) {
240
+
241
+ chk1[i][0] = 1;
242
+
243
+ chk1[i][1] = e[i];
244
+
245
+ } else {
246
+
247
+ x = (int) Math.ceil(1.0 * b / (d[i] / a));
248
+
249
+ chk1[i][0] = x;
250
+
251
+ chk1[i][1] = e[i] * x;
252
+
253
+ }
254
+
255
+ }
256
+
257
+
258
+
259
+ int ans = 0;
260
+
261
+ for (int i = 0; i < n - 1; i++) {
262
+
263
+
264
+
265
+ if (chk1[i][1] == 0) {
266
+
267
+ ans = i + 1;
268
+
269
+ continue;
270
+
271
+ }
272
+
273
+
274
+
275
+ if (chk1[i][1] < chk1[i + 1][1]) {
276
+
277
+ ans = i;
278
+
279
+ } else {
280
+
281
+ ans = i + 1;
282
+
283
+ }
284
+
285
+ }
286
+
287
+
288
+
289
+ result[ans] += chk1[ans][0];
290
+
291
+ return result;
292
+
293
+ }
294
+
295
+ }
296
+
297
+ ```
298
+
299
+ ※以下初回分ですがコメント頂いているので残してます。
300
+
301
+ ---
302
+
303
+ ```java
304
+
305
+ 言語が何か分からないので自分の勉強のために例題としてjavaで実装してみました。
306
+
307
+ if文とfor文くらいしか使ってないですが何かの参考になればと思います。
308
+
309
+ 5x5と5x7のケースしかテストしていません。
310
+
311
+
312
+
313
+ ---
314
+
315
+
316
+
317
+ 出力結果
318
+
319
+
320
+
321
+ 5m x 5枚必要
322
+
323
+
324
+
325
+ 1種類でまかなう場合
326
+
327
+ 12m巻 x 3ロール = 24000円
328
+
329
+ 30m巻 x 1ロール = 22000円
330
+
331
+ 60m巻 x 1ロール = 40000円
332
+
333
+
334
+
335
+
336
+
337
+ 複数で組み合わせる場合
338
+
339
+ 12m巻 x 3ロール = 24000円
340
+
341
+ 総計24000円
342
+
343
+
344
+
345
+ ---
346
+
347
+ 5m x 7枚必要
348
+
349
+
350
+
351
+ 1種類でまかなう場合
352
+
353
+ 12m巻 x 3ロール = 24000円
354
+
355
+ 30m巻 x 2ロール = 44000円
356
+
357
+ 60m巻 x 1ロール = 40000円
358
+
359
+
360
+
361
+
362
+
363
+ 複数で組み合わせる場合
364
+
365
+ 30m巻 x 1ロール = 22000円
366
+
367
+ 12m巻 x 1ロール = 8000円
368
+
369
+ 総計30000円
370
+
371
+
372
+
373
+ public class memo102 {
374
+
375
+
376
+
377
+ // 長さ5mを5枚必要な場合
378
+
379
+ // パターン① 12m巻でまかなうと、3ロール必要、8,000円x3ロール=24,000円
380
+
381
+ // パターン② 30m巻でまかなうと、1ロール必要、22,000円x1ロール=22,000円
382
+
383
+ //
384
+
385
+ // この場合は、パターン②の30m巻を1ロール購入するのが正解です。
386
+
387
+ //
388
+
389
+ // 長さ5mを7枚必要な場合
390
+
391
+ // パターン① 12m巻のみでまかなうと、4ロール必要、8,000円x4ロール=32,000円
392
+
393
+ // パターン② 30m巻のみでまかなうと、2ロール必要、22,000円x2ロール=44,000円
394
+
395
+ // パターン③ 30m巻と12m巻でまかなうと、30m巻1ロール、12m巻1ロール= 8,000円+22,000円=30,000円
396
+
397
+ //
398
+
399
+ // この場合は、パターン③の30mと12mを組み合わせるパターンが最も安くなります。
400
+
401
+
402
+
403
+ public static void main(String[] args) {
404
+
405
+
406
+
407
+ // a b c
408
+
409
+ // a=必要長さ (m)
410
+
411
+ // b=必要枚数 (枚)
412
+
413
+ // c=a*b=合計長さ (m)
414
+
415
+ //
416
+
417
+ // d e
418
+
419
+ // d=ロール (m)
420
+
421
+ // e=単価 (円)
422
+
423
+
424
+
425
+ //例題
426
+
427
+ //5x5
428
+
429
+ //5x7
430
+
431
+ //18x2
432
+
433
+
434
+
435
+ int a = 18;
436
+
437
+ int b = 2;
438
+
439
+ int c = a * b;
440
+
441
+
442
+
443
+ int[] d = { 12, 30, 60 };
444
+
445
+ int[] e = { 8000, 22000, 40000 };
446
+
447
+
448
+
449
+ func(a, b, c, d, e);
450
+
451
+
452
+
453
+ }
454
+
455
+
456
+
457
+ static void func(int a, int b, int c, int[] d, int[] e) {
458
+
151
459
  int sum;
152
460
 
153
461
  int x;
154
462
 
463
+
464
+
465
+ System.out.println(a + "m x " + b + "枚必要");
466
+
155
- int[][] chk1 = new int[n][2];
467
+ System.out.println();
156
-
157
-
158
-
468
+
159
- //d0 //d1
469
+ System.out.println("1種類でまかなう場合");
160
-
161
- //12 //30
470
+
162
-
163
- //a5 b5
471
+
164
-
165
- //c25
472
+
166
-
167
-
168
-
169
- //d0 //d1
170
-
171
- //12 //30
172
-
173
- //a5 b7
174
-
175
- //c35
176
-
177
-
178
-
179
- //d0 //d1
180
-
181
- //12 //30
182
-
183
- //a18 b2
473
+ //1種類でまかなう
184
-
185
- //c36
474
+
186
-
187
-
188
-
189
- for (int i = 0; i < n; i++) {
475
+ for (int i = 0; i < d.length; i++) {
476
+
190
-
477
+ sum = 0;
478
+
191
-
479
+ x = 0;
480
+
481
+
482
+
192
-
483
+ //追記
484
+
193
- if (d[i] < a) {
485
+ if(d[i]<a) {
194
486
 
195
487
  continue;
196
488
 
@@ -198,19 +490,23 @@
198
490
 
199
491
 
200
492
 
201
- if (d[i] > c) {
493
+ if (d[i] >= c) {
202
-
494
+
203
- chk1[i][0] = 1;
495
+ x = (int) Math.ceil(c * 1.0 / d[i]);
204
-
496
+
205
- chk1[i][1] = e[i];
497
+ sum = x * e[i];
498
+
499
+ System.out.println(d[i] + "m巻 x " + x + "ロール = " + sum + "円");
206
500
 
207
501
  } else {
208
502
 
503
+
504
+
209
- x = (int) Math.ceil(1.0 * b / (d[i] / a));
505
+ x = (int) Math.ceil(c * 1.0 / d[i]);
210
-
211
- chk1[i][0] = x;
506
+
212
-
213
- chk1[i][1] = e[i] * x;
507
+ sum = x * e[i];
508
+
509
+ System.out.println(d[i] + "m巻 x " + x + "ロール = " + sum + "円");
214
510
 
215
511
  }
216
512
 
@@ -218,15 +514,29 @@
218
514
 
219
515
 
220
516
 
517
+ System.out.println();
518
+
519
+ System.out.println();
520
+
521
+ System.out.println("複数で組み合わせる場合");
522
+
523
+
524
+
525
+ //複数で組み合わせる場合
526
+
221
- int ans = 0;
527
+ sum = 0;
528
+
222
-
529
+ x = 0;
530
+
531
+ int tmp[] = new int[d.length];
532
+
533
+
534
+
223
- for (int i = 0; i < n - 1; i++) {
535
+ for (int j = d.length - 1; j >= 0; j--) {
224
-
225
-
226
-
536
+
537
+
538
+
227
- if (chk1[i][1] == 0) {
539
+ if (d[j] >= c && j != 0) {
228
-
229
- ans = i + 1;
230
540
 
231
541
  continue;
232
542
 
@@ -234,13 +544,45 @@
234
544
 
235
545
 
236
546
 
547
+ if(d[j]<a) {
548
+
549
+ continue;
550
+
551
+ }
552
+
553
+
554
+
555
+
556
+
557
+ while (c > 0) {
558
+
559
+ c = c - d[j];
560
+
561
+ sum += e[j];
562
+
563
+ tmp[j]++;
564
+
565
+
566
+
237
- if (chk1[i][1] < chk1[i + 1][1]) {
567
+ if (c - d[j] < 0 && j != 0) {
238
-
568
+
569
+
570
+
239
- ans = i;
571
+ //追記
240
-
572
+
241
- } else {
573
+ if(d[j-1]<a) {
242
-
574
+
243
- ans = i + 1;
575
+ sum += e[j];
576
+
577
+ tmp[j]++;
578
+
579
+ }
580
+
581
+
582
+
583
+ break;
584
+
585
+ }
244
586
 
245
587
  }
246
588
 
@@ -248,326 +590,22 @@
248
590
 
249
591
 
250
592
 
251
- result[ans] = chk1[ans][0];
593
+ for (int i = d.length - 1; i >= 0; i--) {
252
-
594
+
253
- return result;
595
+ if (tmp[i] != 0) {
596
+
597
+ System.out.println(d[i] + "m巻 x " + tmp[i] + "ロール = " + tmp[i] * e[i] + "円");
598
+
599
+ }
600
+
601
+ }
602
+
603
+ System.out.println(" 総計" + sum + "円");
254
604
 
255
605
  }
256
606
 
257
607
  }
258
608
 
609
+
610
+
259
611
  ```
260
-
261
- ※以下初回分ですがコメント頂いているので残してます。
262
-
263
- ---
264
-
265
- ```java
266
-
267
- 言語が何か分からないので自分の勉強のために例題としてjavaで実装してみました。
268
-
269
- if文とfor文くらいしか使ってないですが何かの参考になればと思います。
270
-
271
- 5x5と5x7のケースしかテストしていません。
272
-
273
-
274
-
275
- ---
276
-
277
-
278
-
279
- 出力結果
280
-
281
-
282
-
283
- 5m x 5枚必要
284
-
285
-
286
-
287
- 1種類でまかなう場合
288
-
289
- 12m巻 x 3ロール = 24000円
290
-
291
- 30m巻 x 1ロール = 22000円
292
-
293
- 60m巻 x 1ロール = 40000円
294
-
295
-
296
-
297
-
298
-
299
- 複数で組み合わせる場合
300
-
301
- 12m巻 x 3ロール = 24000円
302
-
303
- 総計24000円
304
-
305
-
306
-
307
- ---
308
-
309
- 5m x 7枚必要
310
-
311
-
312
-
313
- 1種類でまかなう場合
314
-
315
- 12m巻 x 3ロール = 24000円
316
-
317
- 30m巻 x 2ロール = 44000円
318
-
319
- 60m巻 x 1ロール = 40000円
320
-
321
-
322
-
323
-
324
-
325
- 複数で組み合わせる場合
326
-
327
- 30m巻 x 1ロール = 22000円
328
-
329
- 12m巻 x 1ロール = 8000円
330
-
331
- 総計30000円
332
-
333
-
334
-
335
- public class memo102 {
336
-
337
-
338
-
339
- // 長さ5mを5枚必要な場合
340
-
341
- // パターン① 12m巻でまかなうと、3ロール必要、8,000円x3ロール=24,000円
342
-
343
- // パターン② 30m巻でまかなうと、1ロール必要、22,000円x1ロール=22,000円
344
-
345
- //
346
-
347
- // この場合は、パターン②の30m巻を1ロール購入するのが正解です。
348
-
349
- //
350
-
351
- // 長さ5mを7枚必要な場合
352
-
353
- // パターン① 12m巻のみでまかなうと、4ロール必要、8,000円x4ロール=32,000円
354
-
355
- // パターン② 30m巻のみでまかなうと、2ロール必要、22,000円x2ロール=44,000円
356
-
357
- // パターン③ 30m巻と12m巻でまかなうと、30m巻1ロール、12m巻1ロール= 8,000円+22,000円=30,000円
358
-
359
- //
360
-
361
- // この場合は、パターン③の30mと12mを組み合わせるパターンが最も安くなります。
362
-
363
-
364
-
365
- public static void main(String[] args) {
366
-
367
-
368
-
369
- // a b c
370
-
371
- // a=必要長さ (m)
372
-
373
- // b=必要枚数 (枚)
374
-
375
- // c=a*b=合計長さ (m)
376
-
377
- //
378
-
379
- // d e
380
-
381
- // d=ロール (m)
382
-
383
- // e=単価 (円)
384
-
385
-
386
-
387
- //例題
388
-
389
- //5x5
390
-
391
- //5x7
392
-
393
- //18x2
394
-
395
-
396
-
397
- int a = 18;
398
-
399
- int b = 2;
400
-
401
- int c = a * b;
402
-
403
-
404
-
405
- int[] d = { 12, 30, 60 };
406
-
407
- int[] e = { 8000, 22000, 40000 };
408
-
409
-
410
-
411
- func(a, b, c, d, e);
412
-
413
-
414
-
415
- }
416
-
417
-
418
-
419
- static void func(int a, int b, int c, int[] d, int[] e) {
420
-
421
- int sum;
422
-
423
- int x;
424
-
425
-
426
-
427
- System.out.println(a + "m x " + b + "枚必要");
428
-
429
- System.out.println();
430
-
431
- System.out.println("1種類でまかなう場合");
432
-
433
-
434
-
435
- //1種類でまかなう
436
-
437
- for (int i = 0; i < d.length; i++) {
438
-
439
- sum = 0;
440
-
441
- x = 0;
442
-
443
-
444
-
445
- //追記
446
-
447
- if(d[i]<a) {
448
-
449
- continue;
450
-
451
- }
452
-
453
-
454
-
455
- if (d[i] >= c) {
456
-
457
- x = (int) Math.ceil(c * 1.0 / d[i]);
458
-
459
- sum = x * e[i];
460
-
461
- System.out.println(d[i] + "m巻 x " + x + "ロール = " + sum + "円");
462
-
463
- } else {
464
-
465
-
466
-
467
- x = (int) Math.ceil(c * 1.0 / d[i]);
468
-
469
- sum = x * e[i];
470
-
471
- System.out.println(d[i] + "m巻 x " + x + "ロール = " + sum + "円");
472
-
473
- }
474
-
475
- }
476
-
477
-
478
-
479
- System.out.println();
480
-
481
- System.out.println();
482
-
483
- System.out.println("複数で組み合わせる場合");
484
-
485
-
486
-
487
- //複数で組み合わせる場合
488
-
489
- sum = 0;
490
-
491
- x = 0;
492
-
493
- int tmp[] = new int[d.length];
494
-
495
-
496
-
497
- for (int j = d.length - 1; j >= 0; j--) {
498
-
499
-
500
-
501
- if (d[j] >= c && j != 0) {
502
-
503
- continue;
504
-
505
- }
506
-
507
-
508
-
509
- if(d[j]<a) {
510
-
511
- continue;
512
-
513
- }
514
-
515
-
516
-
517
-
518
-
519
- while (c > 0) {
520
-
521
- c = c - d[j];
522
-
523
- sum += e[j];
524
-
525
- tmp[j]++;
526
-
527
-
528
-
529
- if (c - d[j] < 0 && j != 0) {
530
-
531
-
532
-
533
- //追記
534
-
535
- if(d[j-1]<a) {
536
-
537
- sum += e[j];
538
-
539
- tmp[j]++;
540
-
541
- }
542
-
543
-
544
-
545
- break;
546
-
547
- }
548
-
549
- }
550
-
551
- }
552
-
553
-
554
-
555
- for (int i = d.length - 1; i >= 0; i--) {
556
-
557
- if (tmp[i] != 0) {
558
-
559
- System.out.println(d[i] + "m巻 x " + tmp[i] + "ロール = " + tmp[i] * e[i] + "円");
560
-
561
- }
562
-
563
- }
564
-
565
- System.out.println(" 総計" + sum + "円");
566
-
567
- }
568
-
569
- }
570
-
571
-
572
-
573
- ```

3

初回分の文章を全てコード内に移動。

2018/08/29 10:33

投稿

opyon
opyon

スコア1009

test CHANGED
@@ -258,15 +258,11 @@
258
258
 
259
259
  ```
260
260
 
261
-
262
-
263
-
264
-
265
261
  ※以下初回分ですがコメント頂いているので残してます。
266
262
 
267
263
  ---
268
264
 
269
-
265
+ ```java
270
266
 
271
267
  言語が何か分からないので自分の勉強のために例題としてjavaで実装してみました。
272
268
 
@@ -336,12 +332,6 @@
336
332
 
337
333
 
338
334
 
339
- ```java
340
-
341
-
342
-
343
-
344
-
345
335
  public class memo102 {
346
336
 
347
337
 

2

最初から作り直しました。

2018/08/29 08:55

投稿

opyon
opyon

スコア1009

test CHANGED
@@ -1,3 +1,273 @@
1
+ 作り直しの途中ですが取り急ぎ時間がないので更新します。
2
+
3
+ 複数の組み合わせは未実装。
4
+
5
+ 出力結果はコード内のコメントに残してます。
6
+
7
+
8
+
9
+ ```java
10
+
11
+
12
+
13
+ public class memo102 {
14
+
15
+
16
+
17
+ // 例えば、いくつか例です。
18
+
19
+ //
20
+
21
+ // 長さ5mを5枚必要な場合
22
+
23
+ // パターン① 12m巻でまかなうと、3ロール必要、8,000円x3ロール=24,000円
24
+
25
+ // パターン② 30m巻でまかなうと、1ロール必要、19,000円x1ロール=19,000円
26
+
27
+ //
28
+
29
+ // この場合は、パターン②の30m巻を1ロール購入するのが正解です。
30
+
31
+ //
32
+
33
+ // 長さ5mを7枚必要な場合
34
+
35
+ // パターン① 12m巻のみでまかなうと、4ロール必要、8,000円x4ロール=32,000円
36
+
37
+ // パターン② 30m巻のみでまかなうと、2ロール必要、19,000円x2ロール=38,000円
38
+
39
+ // パターン③ 30m巻と12m巻でまかなうと、30m巻1ロール、12m巻1ロール= 8,000円+19,000円=27,000円
40
+
41
+ //
42
+
43
+ // この場合は、パターン③の30mと12mを組み合わせるパターンが最も安くなります。
44
+
45
+ //
46
+
47
+ // このような動的で最適なパターンの算出を行うために、どのような方法がありますでしょうか。
48
+
49
+ // どうかお知恵を貸してください。
50
+
51
+
52
+
53
+ public static void main(String[] args) {
54
+
55
+
56
+
57
+ // a=必要長さ (m)
58
+
59
+ // b=必要枚数 (枚)
60
+
61
+ // c=a*b=合計長さ (m)
62
+
63
+ // d=ロール (m)
64
+
65
+ // e=単価 (円)
66
+
67
+
68
+
69
+ //例題
70
+
71
+ //5x5
72
+
73
+ //5x7
74
+
75
+ //18x2
76
+
77
+
78
+
79
+ // 5m x 5枚必要
80
+
81
+ // 30m巻 x 1ロール = 19000円
82
+
83
+ // 最安値総計19000円
84
+
85
+
86
+
87
+ // 5m x 7枚必要
88
+
89
+ // 12m巻 x 4ロール = 32000円
90
+
91
+ // 最安値総計32000円
92
+
93
+
94
+
95
+ // 18m x 2枚必要
96
+
97
+ // 30m巻 x 2ロール = 38000円
98
+
99
+ // 最安値総計38000円
100
+
101
+
102
+
103
+ int a = 18;
104
+
105
+ int b = 2;
106
+
107
+ int c = a * b;
108
+
109
+
110
+
111
+ int[] d = { 12, 30 };
112
+
113
+ int[] e = { 8000, 19000 };
114
+
115
+
116
+
117
+ int[] ans = func(a, b, c, d, e);
118
+
119
+ int sum = 0;
120
+
121
+
122
+
123
+ System.out.println(a + "m x " + b + "枚必要");
124
+
125
+ for (int i = 0; i < ans.length; i++) {
126
+
127
+ if (ans[i] != 0) {
128
+
129
+ sum += ans[i] * e[i];
130
+
131
+ System.out.println(d[i] + "m巻 x " + ans[i] + "ロール = " + ans[i] * e[i] + "円");
132
+
133
+ }
134
+
135
+ }
136
+
137
+ System.out.println(" 最安値総計" + sum + "円");
138
+
139
+ }
140
+
141
+
142
+
143
+ static int[] func(int a, int b, int c, int[] d, int[] e) {
144
+
145
+
146
+
147
+ int n = d.length;
148
+
149
+ int[] result = new int[n];
150
+
151
+ int sum;
152
+
153
+ int x;
154
+
155
+ int[][] chk1 = new int[n][2];
156
+
157
+
158
+
159
+ //d0 //d1
160
+
161
+ //12 //30
162
+
163
+ //a5 b5
164
+
165
+ //c25
166
+
167
+
168
+
169
+ //d0 //d1
170
+
171
+ //12 //30
172
+
173
+ //a5 b7
174
+
175
+ //c35
176
+
177
+
178
+
179
+ //d0 //d1
180
+
181
+ //12 //30
182
+
183
+ //a18 b2
184
+
185
+ //c36
186
+
187
+
188
+
189
+ for (int i = 0; i < n; i++) {
190
+
191
+
192
+
193
+ if (d[i] < a) {
194
+
195
+ continue;
196
+
197
+ }
198
+
199
+
200
+
201
+ if (d[i] > c) {
202
+
203
+ chk1[i][0] = 1;
204
+
205
+ chk1[i][1] = e[i];
206
+
207
+ } else {
208
+
209
+ x = (int) Math.ceil(1.0 * b / (d[i] / a));
210
+
211
+ chk1[i][0] = x;
212
+
213
+ chk1[i][1] = e[i] * x;
214
+
215
+ }
216
+
217
+ }
218
+
219
+
220
+
221
+ int ans = 0;
222
+
223
+ for (int i = 0; i < n - 1; i++) {
224
+
225
+
226
+
227
+ if (chk1[i][1] == 0) {
228
+
229
+ ans = i + 1;
230
+
231
+ continue;
232
+
233
+ }
234
+
235
+
236
+
237
+ if (chk1[i][1] < chk1[i + 1][1]) {
238
+
239
+ ans = i;
240
+
241
+ } else {
242
+
243
+ ans = i + 1;
244
+
245
+ }
246
+
247
+ }
248
+
249
+
250
+
251
+ result[ans] = chk1[ans][0];
252
+
253
+ return result;
254
+
255
+ }
256
+
257
+ }
258
+
259
+ ```
260
+
261
+
262
+
263
+
264
+
265
+ ※以下初回分ですがコメント頂いているので残してます。
266
+
267
+ ---
268
+
269
+
270
+
1
271
  言語が何か分からないので自分の勉強のために例題としてjavaで実装してみました。
2
272
 
3
273
  if文とfor文くらいしか使ってないですが何かの参考になればと思います。

1

18x2に対応

2018/08/29 08:45

投稿

opyon
opyon

スコア1009

test CHANGED
@@ -70,6 +70,8 @@
70
70
 
71
71
 
72
72
 
73
+
74
+
73
75
  public class memo102 {
74
76
 
75
77
 
@@ -90,7 +92,7 @@
90
92
 
91
93
  // パターン① 12m巻のみでまかなうと、4ロール必要、8,000円x4ロール=32,000円
92
94
 
93
- // パターン② 30m巻のみでまかなうと、2ロール必要、22,000円x2ロール=44,000円
95
+ // パターン② 30m巻のみでまかなうと、2ロール必要、22,000円x2ロール=44,000円
94
96
 
95
97
  // パターン③ 30m巻と12m巻でまかなうと、30m巻1ロール、12m巻1ロール= 8,000円+22,000円=30,000円
96
98
 
@@ -128,11 +130,13 @@
128
130
 
129
131
  //5x7
130
132
 
131
-
133
+ //18x2
132
-
134
+
135
+
136
+
133
- int a = 5;
137
+ int a = 18;
134
-
138
+
135
- int b = 5;
139
+ int b = 2;
136
140
 
137
141
  int c = a * b;
138
142
 
@@ -178,6 +182,16 @@
178
182
 
179
183
 
180
184
 
185
+ //追記
186
+
187
+ if(d[i]<a) {
188
+
189
+ continue;
190
+
191
+ }
192
+
193
+
194
+
181
195
  if (d[i] >= c) {
182
196
 
183
197
  x = (int) Math.ceil(c * 1.0 / d[i]);
@@ -232,6 +246,16 @@
232
246
 
233
247
 
234
248
 
249
+ if(d[j]<a) {
250
+
251
+ continue;
252
+
253
+ }
254
+
255
+
256
+
257
+
258
+
235
259
  while (c > 0) {
236
260
 
237
261
  c = c - d[j];
@@ -244,6 +268,20 @@
244
268
 
245
269
  if (c - d[j] < 0 && j != 0) {
246
270
 
271
+
272
+
273
+ //追記
274
+
275
+ if(d[j-1]<a) {
276
+
277
+ sum += e[j];
278
+
279
+ tmp[j]++;
280
+
281
+ }
282
+
283
+
284
+
247
285
  break;
248
286
 
249
287
  }