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

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

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

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

Q&A

1回答

2392閲覧

二分探索により target x の値の近似値を表示する。

anpan___

総合スコア28

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

0グッド

0クリップ

投稿2019/07/03 04:34

編集2019/07/03 06:44

現在未経験から、独学でJavaを勉強中の身です。

今回課題は、フローチャートを作成する練習をおこなっており、

 a[10]の配列をソートし、配列内データの最大値と最小値の平均の近似値を求め、その値が格納されている配列位置をあきらかにしなさい。

というアルゴリズムを考えるものです。

ソートについては、数が少なかったので、バブルソートを実行済みです。

int[] a = {1, 15, 20, 30, 35, 40, 60, 70, 75, 100};
int target = 80;

これをフローチャートで紐解いていきたいと考えています。
自分の考えを整理すると

int left = 0;
int right = a.length - 1;

 ①int mid = (left + right) / 2;
if (a[mid] == target){
System.out.println("近似値のある配列はa[" + mid + "]です。");
} else {
if (target < a[mid]) {
right = mid;
else
left = mid;
}
}
その後①を繰りかえす。

仮に丁度 target と同じ数字があるならば、これで完結しますが、現在の場合のように近似値を求める場合の考え方がわかっておりません。
初歩的な質問であることは重々承知ですがどなたか教えていただけませんでしょうか?

追記
![イメージ説明
初めて書いているのでみにくい、おかしな表記多々あると思いますが、☆の部分の処理がしりたいです!

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

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

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

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

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

hayataka2049

2019/07/03 05:02

ここでいう「近似値」の定義は何ですか? 数学的な用語とは違う気がします(要素の中で(min+max)/2にもっとも値が近いものの値、ということでいいのかしら)。
anpan___

2019/07/03 05:09

大変失礼いたしました! こちらの質問中ですと、 要素の中で target に最も値が近いものを近似値と呼ばせていただいておりました。 用語的に間違っていたならば申し訳ございません!
anpan___

2019/07/03 05:12

結果的には taget = 80 ですので 要素内で一番近い数字は a[8] の75となります。 ですので アンサーは a[8] です! この target から、 a[8]を 導き出す過程の紐解き方が理解できておりません。
guest

回答1

0

二分探索で目的の値が見つからない場合、「どことどこの間に入るか」が分かります。例ならば、a[8]とa[9]の間に入ります。このどちらかが近い値となるので、その「近さ」を直接比較しましょう。

投稿2019/07/03 05:39

swordone

総合スコア20651

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

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

anpan___

2019/07/03 06:20

絶対値の小さいほうを、取り上げるのですね! 仮にa[x]に同じ値が複数個あった場合の処理をも知りたいのですが教えていただけないでしょうか…?
swordone

2019/07/03 06:30

何が問題になりますか?
anpan___

2019/07/03 06:33

同じ値が複数個あった場合、その値が target に最も近い数字なら、すべて対象にしたいと考えています。 そのアルゴリズムを知りたいと考えています!
swordone

2019/07/03 07:05

同じ値なら連続しているはずです。後はご自由に。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問