演習 08

問題 1

1111 以下の自然数のうち,11 の倍数を大きい順に半角スペース区切りで標準出力せよ。

問題 2

1000 以上,1111 未満の整数のうち,7 または 11 の倍数を小さい順に半角スペース区切りで標準出力せよ。

問題 3

配列 data の先頭 n 要素を選択ソートする関数 selectionSort(data, n) は以下のように再帰的に定義できる。

selectionSort(data, n)
  もし n が 0 より大きければ以下を実行する
    k を、dataの先頭からn個のうちの最大値の添字とする
    data[n - 1] と data[k] を入れ替え、selectionSort(data, n - 1) を実行する

この関数を再帰を用いて作成し、選択ソートを行う以下のプログラムを完成させよ。

void setup() {
  noLoop();
}

void draw() {
  int[] data = generateData(20);

  println("before sort");
  printArray(data);

  selectionSort(data, data.length);

  println("after sort");
  printArray(data);

  if (isSorted(data)) {
    println("OK");
  } else {
    println("NG");
  }
}

int[] generateData(int n) {
  int[] result = new int[n];
  for (int i = 0; i < n; ++i) {
    result[i] = int(random(50000));
  }
  return result;
}

boolean isSorted(int[] data) {
  for (int i = 1; i < data.length; ++i) {
    if (data[i - 1] > data[i]) {
      return false;
    }
  }
  return true;
}

問題 4

選択ソートのプログラムを再帰を用いずに作成せよ。

問題 5

は、 となる が存在するとき を、そうでないとき を返す関数である。 は、次のように再帰的に定義できる。 ただし とする。

この関数を再帰を用いて作成し、二分探索を行う以下のプログラムを完成させよ。 二分探索については 資料 も参照すること。

void setup() {
  noLoop();
}

void draw() {
  int[] data = {5, 9, 23, 26, 55, 66, 79, 80, 82, 93};
  find(data, 0);
  find(data, 5);
  find(data, 50);
  find(data, 55);
  find(data, 93);
  find(data, 100);
}

void find(int[] data, int target) {
  int index = binarySearch(data, 0, data.length - 1, target);
  if (index > -1) {
    println("Found: data[" + index + "] == " + target);
  } else {
    println("Not Found: " + target);
  }
}

問題 6

二分探索のプログラムを再帰を用いずに作成せよ。

results matching ""

    No results matching ""