質問編集履歴

4

具体化

2020/06/04 13:52

投稿

grape_ll
grape_ll

スコア83

test CHANGED
File without changes
test CHANGED
@@ -126,13 +126,13 @@
126
126
 
127
127
 
128
128
 
129
- ### 質問内容
129
+ ### 質問内容(解決:下の追記に新たな問題点を書かせていただきました)
130
130
 
131
131
  前の税率で税込み価格から税抜き価格になおすときに,その税込み価格になる最大の税抜き価格の計算がうまくいきません.どのように工夫すればうまくいくのか教えていただきたいです.よろしくお願いします.
132
132
 
133
133
 
134
134
 
135
- ### コード
135
+ ### コード
136
136
 
137
137
  ```C
138
138
 

3

問題の具体化

2020/06/04 13:52

投稿

grape_ll
grape_ll

スコア83

test CHANGED
File without changes
test CHANGED
@@ -122,45 +122,7 @@
122
122
 
123
123
 
124
124
 
125
- ヒント
125
+
126
-
127
- 以下の表に, 消費税率変更後に税込価格が最大となる税抜価格の組み合わせ例を, サンプル入力のデータセットごとに1つずつ示す.
128
-
129
-
130
-
131
- データセット:税抜価格:消費税率 y% 時の税込価格
132
-
133
- 5 8 105 : 13, 88 : 14 + 95 = 109
134
-
135
- 8 5 105 : 12, 87 : 12 + 91 = 103
136
-
137
- 1 2 24 : 1, 23 : 1 + 23 = 24
138
-
139
- 99 98 24 : 1, 12 : 1 + 23 = 24
140
-
141
- 12 13 26 : 1, 23 : 1 + 25 = 26
142
-
143
- 1 22 23 : 1, 22 : 1 + 26 = 27
144
-
145
- 1 13 201 : 1,199 : 1 +224 = 225
146
-
147
- 13 16 112 : 25, 75 : 29 + 87 = 116
148
-
149
- 2 24 50 : 25, 25 : 31 + 31 = 62
150
-
151
- 1 82 61 : 11, 50 : 20 + 91 = 111
152
-
153
- 1 84 125 : 50, 75 : 92 +138 = 230
154
-
155
- 1 99 999 : 92,899 : 183+1789 =1972
156
-
157
- 99 1 999 : 1,502 : 1 +507 = 508
158
-
159
- 98 99 999 : 5,500 : 9 +995 =1004
160
-
161
- 1 99 11 : 1, 10 : 1 + 19 = 20
162
-
163
- 99 1 12 : 1, 6 : 1 + 6 = 7
164
126
 
165
127
 
166
128
 
@@ -367,3 +329,187 @@
367
329
  (199) 224
368
330
 
369
331
  (99) 114
332
+
333
+
334
+
335
+ ---------------------------------------------------------------------------------------------
336
+
337
+ #追記
338
+
339
+ ### 現時点での問題点
340
+
341
+ 大方の答えは一致するが,数値が小さい入力の際に答えより大きい結果が出てしまう場合がある.
342
+
343
+
344
+
345
+ ### 再度書き直したコード
346
+
347
+ ```C
348
+
349
+ #include<stdio.h>
350
+
351
+ #include<math.h>
352
+
353
+ int main(void){
354
+
355
+ int a,b,c,ans;
356
+
357
+ int cal,ori;
358
+
359
+ int p1max,p2max;
360
+
361
+ int q1max,q2max;
362
+
363
+ int i,j;
364
+
365
+ while(1){
366
+
367
+ scanf("%d %d %d",&a,&b,&c);
368
+
369
+ ans=0;
370
+
371
+ if(a==0&&b==0&&c==0) break;
372
+
373
+ for(i=1;i<=c;i++){
374
+
375
+ p1max=(i*100+99)/(100+a);
376
+
377
+ p2max=((c-i)*100+99)/(100+a);
378
+
379
+ q1max=p1max*(100+b)/100;
380
+
381
+ q2max=p2max*(100+b)/100;
382
+
383
+ if(ans<(q1max+q2max)) ans=q1max+q2max;
384
+
385
+ }
386
+
387
+ printf("%d\n",ans);
388
+
389
+ }
390
+
391
+ return 0;
392
+
393
+ }
394
+
395
+ ```
396
+
397
+ *間違っている箇所を☆で表しました.
398
+
399
+ ### 入力の一部
400
+
401
+ 5 8 105
402
+
403
+ 8 5 105
404
+
405
+ 1 2 24
406
+
407
+ 99 98 24
408
+
409
+ 12 13 26
410
+
411
+ 1 22 23
412
+
413
+ 1 13 201
414
+
415
+ 13 16 112
416
+
417
+ 2 24 50
418
+
419
+ 1 82 61
420
+
421
+ 1 84 125
422
+
423
+ 1 99 999
424
+
425
+ 99 1 999
426
+
427
+ 98 99 999
428
+
429
+ 1 99 11   ☆
430
+
431
+ 99 1 12
432
+
433
+ 11 36 332
434
+
435
+ 11 84 498
436
+
437
+
438
+
439
+ ### 出力の一部
440
+
441
+ 109
442
+
443
+ 103
444
+
445
+ 24
446
+
447
+ 24
448
+
449
+ 27
450
+
451
+ 28
452
+
453
+ 225
454
+
455
+ 116
456
+
457
+ 62
458
+
459
+ 111
460
+
461
+ 230
462
+
463
+ 1972
464
+
465
+ 508
466
+
467
+ 1004
468
+
469
+ 21
470
+
471
+ 7
472
+
473
+ 408
474
+
475
+ 828
476
+
477
+
478
+
479
+ ### 模範解答
480
+
481
+ 109
482
+
483
+ 103
484
+
485
+ 24
486
+
487
+ 24
488
+
489
+ 26
490
+
491
+ 27
492
+
493
+ 225
494
+
495
+ 116
496
+
497
+ 62
498
+
499
+ 111
500
+
501
+ 230
502
+
503
+ 1972
504
+
505
+ 508
506
+
507
+ 1004
508
+
509
+ 20  ☆
510
+
511
+ 7
512
+
513
+ 408
514
+
515
+ 828

2

ミスを直した

2020/06/04 13:50

投稿

grape_ll
grape_ll

スコア83

test CHANGED
File without changes
test CHANGED
@@ -350,7 +350,7 @@
350
350
 
351
351
 
352
352
 
353
- 出力 ()内は税抜き価格の最大値が表示されています.この中の値が正確に答えと一致しません.
353
+ 出力 ()内は税が変わる前の税抜き価格の最大値が表示されています.この中の値が正確に答えと一致しません.
354
354
 
355
355
  (100) 107
356
356
 

1

質問の具体化

2020/06/03 13:25

投稿

grape_ll
grape_ll

スコア83

test CHANGED
File without changes
test CHANGED
@@ -267,3 +267,103 @@
267
267
  1.010000 202 (199) 224
268
268
 
269
269
  0 0 0
270
+
271
+
272
+
273
+ ------------------------------------------------------------------------------------------
274
+
275
+ ### ご指摘いただいて書き直したコード(まだ正確なものは表示されない)
276
+
277
+ ```C
278
+
279
+ #include<stdio.h>
280
+
281
+ #include<math.h>
282
+
283
+ int main(void){
284
+
285
+ int a[1000],b[1000],c[1000],ans;
286
+
287
+ int cal,ori;
288
+
289
+ int i=0;
290
+
291
+ while(1){
292
+
293
+ scanf("%d %d %d",&a[i],&b[i],&c[i]);
294
+
295
+ ans=0;
296
+
297
+ if(a[i]==0&&b[i]==0&&c[i]==0) break;
298
+
299
+ int j;
300
+
301
+ ori=(c[i]*100+99)/(100+a[i]);
302
+
303
+ printf("(%d) ",ori);
304
+
305
+ double postrate=1+(double)b[i]/100;
306
+
307
+ for(j=1;j<ori;j++){
308
+
309
+ if(j==1) ans=j*(double)(1+b[i]/100)+(ori-j)*postrate;
310
+
311
+ else if((cal=j*(double)(1+b[i]/100)+(ori-j)*postrate)<ans) break;
312
+
313
+ else if((cal=j*(double)(1+b[i]/100)+(ori-j)*postrate)>ans) ans=cal;
314
+
315
+ }
316
+
317
+ printf("%d\n",ans);
318
+
319
+ i++;
320
+
321
+ }
322
+
323
+ return 0;
324
+
325
+ }
326
+
327
+ ```
328
+
329
+
330
+
331
+ ### 実行結果
332
+
333
+ 入力
334
+
335
+ 5 8 105
336
+
337
+ 8 5 105
338
+
339
+ 1 2 24
340
+
341
+ 99 98 24
342
+
343
+ 12 13 26
344
+
345
+ 1 22 23
346
+
347
+ 1 13 201
348
+
349
+ 13 16 112
350
+
351
+
352
+
353
+ 出力 ()内は税抜き価格の最大値が表示されています.この中の値が正確に答えと一致しません.
354
+
355
+ (100) 107
356
+
357
+ (98) 102
358
+
359
+ (24) 24
360
+
361
+ (12) 22
362
+
363
+ (24) 26
364
+
365
+ (23) 27
366
+
367
+ (199) 224
368
+
369
+ (99) 114