marunomaruno-memo

marunomaruno-memo

Java問題 サンプル解答 配列(1)

2010年07月10日 | Weblog
1. 10個の要素を持つ配列a、bがある。
配列aの各要素をすべて配列bにコピーする。

2. 配列aの各要素を逆に配列bにコピーする。
    a[0]→b[9]、a[1]→b[8]、・・・ a[9]→b[0]

3. 配列aの各要素を1つずらして、配列bにコピーする。
    a[0]→b[1]、a[1]→b[2]、・・・ 
    a[8]→b[9]、a[9]→b[0]

4. 配列aの各要素を逆にする。[オプション]
    a[0]⇔a[9]、a[1]⇔a[8]、・・・a[4]⇔a[5]

5. 配列aの各要素を1つずつずらす。[オプション]
    a[0]→a[1]→a[2]・・・ →a[9]→a[0]

6.配列DAYSには、つぎの初期値が順番に入っている。
     int[] DAYS = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
これを使い、Quiz0705.java
「月(1~12)monthを入力して、その月の日数を表示する」
を改良する。

7. (線形探索)
要素数10のint型配列aにデータが入っている。
コマンドライン引数で、整数値を指定して、
その数値が配列要素にあるかどうか、
あれば、そのときの添字を表示する。
(参考:午前中のテキストp.58の線形探索)

8. (二分探索)
要素数10のint型配列aにデータが入っている。
このとき、要素の値は昇順に入っている。
コマンドライン引数で、整数値を指定して、
その数値が配列要素にあるかどうか、あれば、
そのときの添字を表示する。
(参考:午前中のテキストp.59の二分探索)

9. (基本交換法)
要素数10のint型配列aにデータが入っている。
この配列要素を昇順に並べ替える。
(参考:午前中のテキストp.62の基本交換法を使う)

10. (基本選択法)
要素数10のint型配列aにデータが入っている。
この配列要素を昇順に並べ替える。
(参考:午前中のテキストp.63の基本選択法を使う)

11. (基本挿入法)
要素数10のint型配列aにデータが入っている。
この配列要素を昇順に並べ替える。
(参考:午前中のテキストp.63の基本挿入法を使う)

12. (文字列探索 - 力まかせ探索法)
char型配列textにデータが入っている。
この文字配列textの中に、パターン文字列
(char型配列pattern)を探索する。あった場
合は、patternの先頭文字と一致するtextの
添字を返す。ない場合は、-1を返す。
(参考:午前中のテキストp.66の力まかせ探索法を使う)

(参考)Stringからchar配列を定義する例
        String textString = "PQACZXYZRXYZ";
        char[] text = textString.toCharArray();

13. (文字列探索 - BM法)
char型配列textにデータが入っている。
この文字配列textの中に、パターン文字列
(char型配列pattern)を探索する。あった場
合は、patternの先頭文字と一致するtextの
添字を返す。ない場合は、-1を返す。
(参考:午前中のテキストp.67のBM法を使う)


(2次元配列)

21. Quiz0904で、じゃんけんの勝敗表(2次
元配列)をつくり、勝負するロジックを簡単
にする。
また、指定した手も、数字ではなく、日本語
表記(グー、チョキ、パー)で表示すること。
--------- ------- -------- --------
勝敗表    0 グー  1 チョキ  2 パー
--------- ------- -------- --------
0 グー    引分け    勝ち     負け
1 チョキ   負け    引分け    勝ち
2 パー     勝ち     負け    引分け
--------- ------- -------- --------

22.金額を入力して、1000円でお釣りをもら
う。お釣りの硬貨は最低枚数とする。
6×2の配列coinsの、2列目に、それぞれのお
釣りの枚数を入れるアルゴリズムを作る。
1列目には硬貨の種類があらかじめ入ってい
るものとする。

    ------- ----------
     硬貨    お釣り枚数
    ------- ----------
[0]     1
[1]     5
[2]    10
[3]    50
[4]   100
[5]   500
    ------- ----------

23.重さに対する料金を出す。
6×2の配列の、1列目に重さ、2列目に料金が
入っている。
なお、重さは、下の表では以下をあらわす。
たとえば、200gに対しては、190円になる。
2000gより重い場合は、一律に2000円とする

    ------- ----
    重さ    料金
    ------- ----
[0]  100     100
[1]  200     190
[2]  400     370
[3]  600     550
[4] 1000     900
[5] 2000    1700
    ------- ----

--------------------------------------------------
/**
 * 10個の要素を持つ配列a、bがある。
 * 配列aの各要素をすべて配列bにコピーする。
 */
public class Quiz1601 {
    public static void main(String[] args) {
        int[] a = {5, 3, 7, 9, 0, 1, 2, 8, 4, 6, };
        int[] b = new int[a.length];

        // 表示する。
        System.out.print("a = [");
        for (int i = 0; i 
            System.out.print(a[i] + ", ");
        }
        System.out.println("]");

        // コピーする。
        for (int i = 0; i 
            b[i] = a[i];
        }

        // 表示する。
        System.out.print("b = [");
        for (int i = 0; i 
            System.out.print(b[i] + ", ");
        }
        System.out.println("]");
    }
}

--------------------------------------------------
/**
 * 配列aの各要素を逆に配列bにコピーする。
 *         a[0]→b[9]、a[1]→b[8]、・・・ a[9]→b[0]
 */
public class Quiz1602 {
    public static void main(String[] args) {
        int[] a = {5, 3, 7, 9, 0, 1, 2, 8, 4, 6, };
        int[] b = new int[a.length];

        // 表示する。
        System.out.print("a = [");
        for (int i = 0; i 
            System.out.print(a[i] + ", ");
        }
        System.out.println("]");

        // 逆順にコピーする。
        for (int i = 0; i 
            b[a.length - i - 1] = a[i];
        }

        // 表示する。
        System.out.print("b = [");
        for (int i = 0; i 
            System.out.print(b[i] + ", ");
        }
        System.out.println("]");
    }
}

--------------------------------------------------
/**
 * 配列aの各要素を1つずらして、配列bにコピーする。
 *         a[0]→b[1]、a[1]→b[2]、・・・ a[8]→b[9]、a[9]→b[0]
 */
public class Quiz1603 {
    public static void main(String[] args) {
        int[] a = {5, 3, 7, 9, 0, 1, 2, 8, 4, 6, };
        int[] b = new int[a.length];

        // 表示する。
        System.out.print("a = [");
        for (int i = 0; i 
            System.out.print(a[i] + ", ");
        }
        System.out.println("]");

        // ずらしてコピーする。
        for (int i = 0; i 
            b[(i + 1) % b.length] = a[i];
        }

        // 表示する。
        System.out.print("b = [");
        for (int i = 0; i 
            System.out.print(b[i] + ", ");
        }
        System.out.println("]");
    }
}

--------------------------------------------------
/**
 * 配列aの各要素を逆にする。(オプション)
 *         a[0]⇔a[9]、a[1]⇔a[8]、・・・a[4]⇔a[5]
 */
public class Quiz1604 {
    public static void main(String[] args) {
        int[] a = {5, 3, 7, 9, 0, 1, 2, 8, 4, 6, };

        // 表示する。
        System.out.print("before = [");
        for (int i = 0; i 
            System.out.print(a[i] + ", ");
        }
        System.out.println("]");

        // 逆にする。
        for (int i = 0; i 
            int w = a[i];
            a[i] = a[a.length - i - 1];
            a[a.length - i - 1] = w;
        }

        // 表示する。
        System.out.print(" after = [");
        for (int i = 0; i 
            System.out.print(a[i] + ", ");
        }
        System.out.println("]");
    }
}

--------------------------------------------------
/**
 * 配列aの各要素を1つずつずらす。(オプション)
 *         a[0]→a[1]→a[2]・・・ →a[9]→a[0]
 */
public class Quiz1605 {
    public static void main(String[] args) {
        int[] a = {5, 3, 7, 9, 0, 1, 2, 8, 4, 6, };

        // 表示する。
        System.out.print("before = [");
        for (int i = 0; i 
            System.out.printf("%d, ", a[i]);
        }
        System.out.println("]");

        // ずらす。
        int w = a[a.length - 1];
        for (int i = a.length - 1; i > 0; i--) {
            a[i] = a[i - 1];
        }
        a[0] = w;

        // 表示する。
        System.out.print(" after = [");
        for (int i = 0; i 
            System.out.printf("%d, ", a[i]);
        }
        System.out.println("]");
    }
}

--------------------------------------------------
/**
 * 月(1~12)を指定して、その月の日数を表示する
 */
public class Quiz1606 {
    public static void main(String[] args) {
        int month = 6;    // 月
        int[] DAYS = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
        
        // 結果を表示する
        System.out.println(month + " 月は " + DAYS[month - 1] + " 日です。");
    }
}
/* 実行結果
6 月は 30 日です。
*/

--------------------------------------------------
/**
 * 7. (線形探索)
 * 要素数10のint型配列aにデータが入っている。
 * コマンドライン引数で、整数値を指定して、その数値が配列要素にあるかどうか、
 * あれば、そのときの添字を表示する。
 * (参考:午前中のテキストp.58の線形探索)
 */
public class Quiz1607 {
    public static void main(String[] args) {
        int key = Integer.parseInt(args[0]);
        int[] a = {50, 30, 90, 40, 100, 10, 20, 60, 80, 70, };

        // 探索する
        int index = -1;
        for (int i = 0; i 
            if (a[i] == key) {
                index = i;
                break;
            }
        }

        // 結果を表示する
        if (index >= 0) {
            System.out.println(key + " はありました。(index = " + index + ")");
        } else {
            System.out.println(key + " はありませんでした。");
        }
    }
}
/* 実行結果
>java Quiz1607 10
10 はありました。(index = 5)

>java Quiz1607 50
50 はありました。(index = 0)

>java Quiz1607 70
70 はありました。(index = 9)

>java Quiz1607 55
55 はありませんでした。
*/

--------------------------------------------------
/**
 * 7. (二分探索)
 * 要素数10のint型配列aにデータが入っている。このとき、要素の値は昇順に入っている。
 * コマンドライン引数で、整数値を指定して、その数値が配列要素にあるかどうか、
 * あれば、そのときの添字を表示する。
 * (参考:午前中のテキストp.58の二分探索)
 */
public class Quiz1608 {
    public static void main(String[] args) {
        int key = Integer.parseInt(args[0]);
        int[] a = {10, 20, 30, 40, 50, 60, 70, 80, 90, 100, };

        // 探索する
        int index = -1;
        int lowerIndex = 0;
        int upperIndex = a.length - 1;
        int middleIndex;
        while (lowerIndex <= upperIndex) {
middleIndex = (lowerIndex + upperIndex) / 2; if (a[middleIndex] <key) { key) { upperIndex = middleIndex - 1; } else { index = middleIndex; break; } } // 結果を表示する if (index >= 0) { System.out.println(key + " はありました。(index = " + index + ")"); } else { System.out.println(key + " はありませんでした。"); } } } /* 実行結果 >java Quiz1608 10 10 はありました。(index = 0) >java Quiz1608 50 50 はありました。(index = 4) >java Quiz1608 100 100 はありました。(index = 9) >java Quiz1608 55 55 はありませんでした。 */ --------------------------------------------------


最新の画像もっと見る

コメントを投稿