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

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

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

Dartは、Googleによって開発されたJavaScriptの代替となることを目的に作られた、ウェブ向けのプログラミング言語である。

Q&A

解決済

1回答

317閲覧

AtCoder Beginners Selection 【ABC085C - Otoshidama 】について

_cocapeach

総合スコア20

Dart

Dartは、Googleによって開発されたJavaScriptの代替となることを目的に作られた、ウェブ向けのプログラミング言語である。

0グッド

0クリップ

投稿2023/11/02 17:39

実現したいこと

AtCoderの問題である 【ABC085C - Otoshidama 】で解答したコードが不正解となったが、なぜ不正解なのかわからないため教えてほしいです。

解答し、不正解となったコード

dart

1import 'dart:io'; 2 3main() { 4 List<int> inputs = 5 stdin.readLineSync()!.split(' ').map((e) => int.parse(e)).toList(); 6 int n = inputs[0]; 7 int y = inputs[1]; 8 9 for (int a = 0; a <= n; a++) { 10 for (int b = 0; b <= (n - a); b++) { 11 for (int c = (n - b - a); c <= (n - b - a); c++) { 12 if (y == ((a * 10000) + (b * 5000) + (c * 1000))) { 13 print("$a $b $c"); 14 return; 15 } 16 } 17 } 18 } 19 20 print("-1 -1 -1"); 21} 22

正解となるコード

dart

1import 'dart:io'; 2 3main() { 4 List<String> input = stdin.readLineSync()!.split(' '); 5 int n = int.parse(input[0]); 6 int y = int.parse(input[1]); 7 8 int a = -1; 9 int b = -1; 10 int c = -1; 11 12 for (int i = 0; i <= n; i++) { 13 for (int j = 0; j <= n - i; j++) { 14 int k = n - i - j; 15 print(k); 16 int total = 10000 * i + 5000 * j + 1000 * k; 17 if (total == y) { 18 a = i; 19 b = j; 20 c = k; 21 } 22 } 23 } 24 25 print('$a $b $c'); 26}

不明点

不正解となったコードで、問題ページに記載されている入力例/出力例は全て試し、問題ない出力がされました。
無駄のあるコードだとは思うのですが、出力結果として何故不正解になるのかがわかりません。
ご教示いただけますと有難いです。
宜しくお願いいたします。

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

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

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

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

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

_cocapeach

2023/11/03 02:55

はい、そちらです。 a,cに掛ける値は試しに変えてみたものになるのですが、そこは逆転しても問題ないと認識していますが、いかがでしょうか。
actorbug

2023/11/03 06:05

printの表示順も逆転するなら問題ないですが、そちらを変えないで掛ける値だけ逆転したら結果も変わってしまいます。
_cocapeach

2023/11/03 06:19

なるほど。盲点でした。。 質問に記載した不正解となったコードは正解だったということですね。 ありがとうございます。
guest

回答1

0

自己解決

実際の提出では、a,cに掛けている値を入れ替えており、
その結果、出力値が逆になってしまうというケアレスミスでした。
質問に記載した不正解となるコードも改めて提出すると正解となりました。

dart

1import 'dart:io'; 2 3main() { 4 List<int> inputs = 5 stdin.readLineSync()!.split(' ').map((e) => int.parse(e)).toList(); 6 int n = inputs[0]; 7 int y = inputs[1]; 8 9 for (int a = 0; a <= n; a++) { 10 for (int b = 0; b <= (n - a); b++) { 11 for (int c = (n - b - a); c <= (n - b - a); c++) { 12 if (y == ((a * 1000) + (b * 5000) + (c * 10000))) { 13 print("$a $b $c"); 14 return; 15 } 16 } 17 } 18 } 19 20 print("-1 -1 -1"); 21}

投稿2023/11/03 06:22

_cocapeach

総合スコア20

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問