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

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

新規登録して質問してみよう
ただいま回答率
85.35%
コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

1475閲覧

AtCoderの過去問ABC165のA問題の不正解の理由

m8aFm77kKU9JuID

総合スコア78

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/07/05 07:55

AtCoderのABC165のA問題について質問させてください。
https://atcoder.jp/contests/abc165/tasks/abc165_a

下記で提出したのですが、不正解でしたが理由が分かりません。

python

1k = int(input()) 2a, b = list(map(int, input().split())) 3s = [i for i in range(a, b) if i % k == 0] 4if a == b and a % k == 0: 5 print('OK') 6elif len(s)==0: 7 print('NG') 8else: 9 print('OK') 10

実装で無理やり感は否めないですが、自分なりのコードテストはOKでした。
解説サイトなどで別解は載っているのですが、自分の提出で何が駄目だったのか恥ずかしながら,腑に落ちず、
お分かりになられる方いらっしゃればと思いまして質問させて頂きました。

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

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

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

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

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

guest

回答2

0

ベストアンサー

k,a,b = 2,1,2の場合、正解はOKですがNGになってしまいます。
原因はrange(a,b)ab-1の間の値しかとらないためです。

投稿2020/07/05 08:06

can110

総合スコア38341

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

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

m8aFm77kKU9JuID

2020/07/05 09:22

なるほど、ありがとうございました。
guest

0

つぎのプログラムを研究してみてください。
質問文のコードでは、 TEST にある例で失敗することがあります。
k, a, b が 1..10 のあいだで試すと、他にも失敗する例fがあります。

solve2() とした判定方法では 1..200 の間で失敗することはないです。
(時間がかかるから試していませんが、 1..1000 でも失敗することはないと思います)

p.py

python3

1def solve(k, a, b): 2 s = [i for i in range(a, b) if i % k == 0] 3 if a == b and a % k == 0: 4 return "OK" 5 elif len(s) == 0: 6 return "NG" 7 else: 8 return "OK" 9 10def solve2(k, a, b): 11 if a % k == 0: 12 return "OK" 13 14 if (a // k + 1) * k <= b: 15 return "OK" 16 return "NG" 17 18def check(k, a, b): 19 for i in range(a, b + 1): 20 if i % k == 0: 21 return "OK" 22 return "NG" 23 24TEST = [ 25 [[7, 500, 600], "OK"], 26 [[4, 5, 7], "NG"], 27 [[1, 11, 11], "OK"], 28 [[2, 11, 11], "NG"], 29 30 [[11, 11, 11], "OK"], 31 [[12, 11, 12], "OK"] 32] 33for t in TEST: 34 k, a, b = t[0] 35 if t[1] != solve(k, a, b): 36 print("Fail ", t) 37 38print("-----------------") 39print("solve") 40for k in range(1, 5): 41 for a in range(1, 5): 42 for b in range(a, 5): 43 if check(k, a, b) != solve(k, a, b): 44 print("Fail", k, a, b) 45 46N = 200 # 1000 47print("-----------------") 48print("solve2") 49for k in range(1, N + 1): 50 for a in range(1, N + 1): 51 for b in range(a, N + 1): 52 if check(k, a, b) != solve2(k, a, b): 53 print("Fail", k, a, b)

実行例
イメージ説明

投稿2020/07/05 10:14

katoy

総合スコア22324

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

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

m8aFm77kKU9JuID

2020/07/05 10:45

これはありがとうございます! こうやって、自分でテストするんですね。 いつも他の人の解答解説読んでいるだけでしたので、これはありがたい。 ここで質問して良かったです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問