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

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

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

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

Q&A

解決済

1回答

1111閲覧

間違っている箇所が分かりません

bluer

総合スコア16

Python

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

0グッド

0クリップ

投稿2020/05/17 14:00

編集2020/05/17 14:40

時計の針の先端の距離を求める問題で、コードの欠陥が分かりません。どなたかわかる方いらっしゃれば教えていただけると嬉しいです。
WAとなってしますのでおそらく期待した結果と異なっています。説明が足りずすみません。

Python3

1import math 2#a,bは短針、長針の長さでhは時間、mは分です。例えばh時m分のような 3a,b,h,m = map(int, input().split()) 4#方針はstartで時刻によって短針と長針の間の角度を設定し、何分かによってstartから角度を引いていきます。180度より大きくならないようにdを置きました。 5start = 30*h 6d = min(abs(start - 5.5 * m),360-abs(start - 5.5 * m)) 7m = int(d) 8#短針と長針が重なった場合、三角形にならないのでelifにまわしました。90度の時も例外処理としました。 9#if文では余弦定理を使って距離を出しています。 10if m!=90 and m!= 0 and m!= 180: 11 c = math.cos(math.radians(d)) 12 k = a**2+b**2-2*a*b*c 13 ans = math.sqrt(k) 14 print(ans) 15elif m == 0: 16 print(abs(a-b)) 17elif m == 180: 18 print(a+b) 19elif m == 90: 20 k = a**2+b**2 21 ans = math.sqrt(k) 22 print(ans) 23

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

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

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

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

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

otn

2020/05/17 14:12

発生している問題は何ですか?
tiitoi

2020/05/17 14:14

a, b, h, m の入力がどういう意味なのか、コードの各部分はどのような意図で書いた処理なのかコメントを入れてください。
meg_

2020/05/17 14:29

「コードの欠陥」とはどういう意味ですか? エラーが出るのか、期待した結果とちがうのか、何なんでしょうか?
guest

回答1

0

ベストアンサー

これやな
https://atcoder.jp/contests/abc168/tasks/abc168_c

python3

1d = min(abs(start - 5.5 * m),360-abs(start - 5.5 * m)) 2m = int(d) # <-ココ!

求めた角度を整数値に丸めてしまってるので答えが合わなくなるのでしょう。

投稿2020/05/17 16:37

hope_mucci

総合スコア4447

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

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

bluer

2020/05/18 00:27

mは条件分岐のために設定しただけなので答えには影響していないはずだと思うのですが、、、
hope_mucci

2020/05/18 02:25 編集

0時49分とか入力してみてください。解がおかしくなるのがわかりますよ。あと、なぜ角度をmに代入した?変数の使いまわしは間違いの元ですよ。
bluer

2020/05/18 03:52

本当だ、、変数mを既に使用しているのを忘れてしまっていました。 int(d)としたのは、角度が0,90,180の時に例外処理をしたかったからなのですが、そのせいで89.8度の時などにも例外に含まれてしまったのですね。どうすればよかったのだろう、、 間違えに気付くことができて本当に助かりました。ありがとうございます。
hope_mucci

2020/05/18 04:13

蛇足ですが余弦定理を使って解く場合、角度による例外処理は必要ありませんよ。0°でも180°でもちゃんと2点間の距離が出ます。 つまり、そもそも条件分岐を考える必要がありませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問