はじめまして。このjavascriptのプログラムの意味を教えていただきたいです。
プログラミング初心者なので分かりやすく詳細に教えていただけると助かります。
public static void merge(int a[],int b[],int c[]){
int i = 0, j = 0, k = 0;
while(i < a.length && j < b.length)
if(a[i] <= b[j]) c[k++] = a[i++];
else c[k++] = b[j++];
while(i < a.length) c[k++] = a[i++];
while(j < b.length) c[k++] = b[j++];
}
public static void main(String[] args) {
// TODO 自動生成されたメソッド・スタブ
final int NA = 10;
final int NB = 20;
int a[] = new int[NA];
int b[] = new int[NB];
int c[] = new int[NA + NB];
a[0] = (int)(Math.random() * 10);
for(int i = 1;i < NA;i++)
a[i] = a[i - 1] + (int)(Math.random() * 10);
b[0] = (int)(Math.random() * 10);
for(int i = 1;i < NB;i++)
b[i] = b[i - 1] + (int)(Math.random() * 10);
System.out.print("a:");
for(int i = 0;i < NA;i++)System.out.print(""+a[i]);
System.out.println();
System.out.print("b:");
for(int i = 0;i < NB;i++)System.out.print(""+b[i]);
System.out.println();
merge(a,b,c);
System.out.print("c:");
for(int i = 0;i < NA;i++)System.out.print(""+c[i]);
System.out.println();
}
}
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
このレベルであれば、まずは初学者向けの学習をすることを強くお勧めします。
以下の学習サイトを推薦しておきます。
無料プランで、十分にこのコードが理解できる域に達します。
理解が早ければ1日もかからず習得できると思います。
https://prog-8.com/
https://codeprep.jp/
No.1
- 回答日時:
これはJavaであって、JavaScriptではありませんけどね。
a
10個の乱数を抽出して格納。
N個目は、N-1個目に抽出した値を加算する。
b
20個の乱数を抽出して格納。
N個目は、N-1個目に抽出した値を加算する。
c
a、bで求めた値を比較し、小さい値から順に格納。
a、b、cの値を出力。
試したところ、例えば以下の結果が出力されました。
a:291617182632343948
b:3591019253034414849505766717478808693
c:2359910161718192526303234343941484849505766717478808693
これはそれぞれ、カンマで区切ると以下のようになります。
a:2,9,16,17,18,26,32,34,39,48
b:3,5,9,10,19,25,30,34,41,48,49,50,57,66,71,74,78,80,86,93
c:2,3,5,9,9,10,16,17,18,19,25,26,30,32,34,34,39,41,48,48,49,50,57,66,71,74,78,80,86,93
aは10個、bは20個抽出しており、N個目はN-1個目の値を加算した値になります。
例えばa:2,9,16,17は、抽出された値は以下ということになります。
1個目 抽出値:2 結果:2
2個目 抽出値:7 結果:9
3個目 抽出値:7 結果:16
4個目 抽出値:1 結果:17
同じようにbも20個の値を生成しています。
cは先に示したカンマ区切りの値の通り、a、bの値を1つずつ比較していき、小さい値順にソートされています。
merge()は下記の通りとなります。
public static void merge(int a[],int b[],int c[]){
int i = 0, j = 0, k = 0;
while(i < a.length && j < b.length)
if(a[i] <= b[j]) c[k++] = a[i++]; // a≦b の場合はaの値を優先する
else c[k++] = b[j++]; // a>b の場合はbの値を優先する
while(i < a.length) c[k++] = a[i++]; // (1)aの値が余ってる時は残りは全部aの値
while(j < b.length) c[k++] = b[j++]; // bの値が余ってる時は残りは全部bの値
}
(1)は、極端な例では、a:9, 18, 27, 36, 45 ・・・ と、すべて乱数が9だった時に、
b:1, 2, 3, 4, 5 ・・・ と、すべて乱数が1だった時には有り得る処理です。
値の個数が、aが10個、bが20個だから(1)はありえないよ、ということにはなりません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
- Ruby vscode 文字化け 1 2022/05/21 19:17
- Java Java プログラム public class Main { public static void 3 2023/08/10 23:46
- Ruby パイソンプログラミング 2 2022/12/03 18:44
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
- MySQL MYSQL エラー 2 2022/10/18 11:37
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ループ処理の際、最後だけ","を...
-
for文を使った累乗の計算方法に...
-
フィールド名やメソッド名に日...
-
総称型ArrayList<E>への参照...
-
evalを使いたい
-
C#の質問
-
java 2次元配列
-
javaプログラミングでの文字化...
-
2つのスクロールバーを連動させ...
-
エラー(互換性の無い型)
-
countに実行した回数をいれたい...
-
数独のJavaプログラム
-
compareToメソッドを使って
-
ループが無駄に複雑な気が…
-
Java、2の0乗~10乗の表示
-
javaについての質問です
-
arraycopy コンパイルエラー
-
JavaのWhile文で
-
リストの値を取得したい
-
javaの配列について質問です。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ループ処理の際、最後だけ","を...
-
java キーボード入力された値の...
-
Java、2の0乗~10乗の表示
-
コマンドライン引数の例外処理...
-
数値⇒漢数字変換 java
-
Ctrl+Zが入力されると終了する...
-
続・ZZZ,ZZZ,ZZ9形式の金額形式...
-
countに実行した回数をいれたい...
-
論理演算子”||”またはの入力方法
-
7つ数字を表示したら改行すると...
-
テキストボックスに入力された...
-
配列を逆順させて表示させる方...
-
繰り返しによる星印の出力
-
Java 入力した整数値の合計を、...
-
キーボードから10人分の点数を...
-
JAVAのfor文で困っています。
-
階乗の式
-
要素数が10の配列で、乱数0~9...
-
Java キーボードから負の数が入...
-
Randomメソッドの確率設定
おすすめ情報
最後から2つ前の文ですが、for(int i=0;i<NA+NB;i++)でした。