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

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

新規登録して質問してみよう
ただいま回答率
85.50%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

3回答

833閲覧

atcoderの問題がわかりません

risushi

総合スコア12

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2019/03/04 11:54

問題文は以下の通りです。

1円硬貨をA枚と
500円硬貨を無限枚持っています.
これらの硬貨だけを使うことによって, ちょうど
N円を支払うことができるかを判定しなさい.

入力は以下の形式で標準入力から与えられる.
N
A

出力
持っている
1円硬貨と
500円硬貨だけで, ちょうど
N円を支払うことができるならば Yes, そうでないならば No を出力しなさい.

入力例 1
2018
218
出力例 1
Yes

500円硬貨 4枚と 1円硬貨18枚で, 2018円を支払うことができるので, 答えは Yes です.

ぼくの回答は以下のとおりです。

C++

1#include <bits/stdc++.h> 2using namespace std; 3 4int main() { 5 int N,A; 6 int B = N % 500; 7 cin >> N >> A; 8 if (A >= B){ 9 cout << "Yes" << endl; 10 }else{ 11 cout << "No" << endl; 12 } 13} 14

このコードで半分くらいがWA(wrong answer)になってしまいました。どこが悪いのか分かりません。

ご回答よろしくおねがいします。

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

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

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

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

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

guest

回答3

0

ベストアンサー

次の二行の順序を逆にすべきです。

C++

int B = N % 500;
cin >> N >> A;

Nの値が確定してから、Bの値を計算するようにしてください。

投稿2019/03/04 11:58

LouiS0616

総合スコア35658

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

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

LouiS0616

2019/03/04 11:59 編集

半分AC取れたのはおそらくただの偶然です。
risushi

2019/03/04 12:04

なるほど!!!! コードの順序も考えなければならないのを忘れていました!! ありがとうございます。
risushi

2019/03/04 12:08

順序を入れ替えたら時間超過(TLE)になってしまったのですがどうすればよいでしょうか、、、?
LouiS0616

2019/03/04 12:13

どの問題でしょう?
LouiS0616

2019/03/04 12:27 編集

試しに提出してみたら2msで通りました。 https://atcoder.jp/contests/abc088/submissions/4469662 制限時間は2sですし、運が悪くて超過するのはちょっと考えづらいです。 別のコードを提出したり、別の問題に提出したり、そのような凡ミスはしていないでしょうか。
risushi

2019/03/04 12:32

わざわざ試していただいてありがとうございます...。 ご指摘の通りの凡ミスをしていました...、すみません...。
LouiS0616

2019/03/04 12:40

いえいえ、解決されたようで何よりです。
guest

0

c++

1#include <iostream> 2 3using namespace std; 4 5int main() { 6 int n, a; 7 cin >> n >> a; 8 string ret = (a >= n % 500) ? "Yes" : "No"; 9 cout << ret << endl; 10}

提出したら、3ms かかりました。でも同じコードを再度提出したら 1ms でした。

投稿2019/03/04 13:37

katoy

総合スコア22324

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

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

katoy

2019/03/05 13:20

変数宣言以外を3行で書いているのは、それなりに意味があります。 入力, 判定、結果標示 がそれぞれ1行になっています。 判定してから入力をする間違いはしにくいです。 また cout が1箇所だけなので、表示せずにプログラムが終わってしまうこともないし 表示書式のブレも発生しにくいです。
guest

0

int N,A;
int B = N % 500; ←この時点ではまだNが入力されてない。

投稿2019/03/04 11:59

episteme

総合スコア16614

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

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

risushi

2019/03/04 12:05

順序が逆だったんですね!! 理解しました。ありがとうございます。
risushi

2019/03/04 12:21 編集

助かりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問