電子書籍の厳選無料作品が豊富!

2つの変数x,targetを入力として受け取る。(二つとも0.0〜360までの値とする)
これらの変数は、円周上にある位置を表すもので、xは現在地、targetはこれから移動したい場所を示す。
その際、右回りと左回りどちらでも移動出来るが、出来るだけ小さい値にしたい。どっち回転で、何度移動すれば良いか出力する。

入力値の例
20.2 200.3
入力値の例 1 のときに期待される出力 左に 179.89999999999998 度、回転します

以下の条件をみたすプログラムをjavaで書くには、どのようにすれば良いですか。

何回やってもうまくいかないです
一度模範解答が見れたら次から頑張れると思います
よろしくお願いします

A 回答 (2件)

何か右回りと左回りが逆なような気がするんだが・・・・・・。


ま、いっか。

> これらの変数は、円周上にある位置を表すもので

数学的に言うと、平面上の点は必ず2つの数の組で表されるのは中学校数学以降お馴染みですね。
この問題の場合、「円周上にある位置を表す」を言う縛りがあるので、極座標

(r, θ)

のrは所与である、と解されて、徹頭徹尾角度θ(問題の場合、xとtarget)だけに拘っています。
そうすると、円周上の任意の点へ「回転」する場合、正方向と負方向として

target - x
-360+target-x

の2つが候補として出てきます。ぶっちゃけそれだけ、ですね。

// ここから

import java.util.Scanner;

class Main {
 public static void main(String[] arg) {
  Scanner scan = new Scanner(System.in);
  double x, target, right, left;
  while (true) {
   x = scan.nextDouble();
   target = scan.nextDouble();
   if ((x < 0.0) || (x > 360) || (target < 0.0) || (target > 360)) {
    continue;
   } else {
    break;
   }
  }
  right = Math.abs(target - x);
  left = Math.abs(-360 + target - x);
  if (right < left) {
   System.out.println("右に " + right + " 度、回転します");
  } else {
   System.out.println("左に " + left + " 度、回転します");
  }
 }
}
    • good
    • 0

「以下の条件」ってなんでしょうか.



と突っ込んでおいて, と.

「何回やってもうまくいかない」ってことは, 当然「何回かやってる」んだよね? では, 例えばどのようにやってどのように「うまくいかない」んですか?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!