演習 04

問題 1

n 個の同じ大きさのボールが左右 1 列に等間隔に並んでいる。 ボールの直径は a メートルであり、また、ボールとボールの間は b メートル離れている。 ボール列の左端と右端それぞれがちょうど壁に接している。 以下の表の全ての n, a, b について、左の壁と右の壁の間の距離を求めてコンソールに表示するプログラムを作成せよ。

n a b
17 22 59
97 87 32
56 1 99
95 11 99
82 2 25

問題 2

自然数 s を受け取り、4 辺の長さが全て自然数かつ面積が s の長方形について、4 辺の長さの和の最小値を求める関数 minSides を作成し以下のプログラムを完成させよ。

となる自然数 について、 が 4 辺の長さの和である。 のとき、 の組としてあり得るのは (1, 12), (2, 6), (3, 4), (4, 3), (6, 2), (12, 1) の 6 通りであり、(3, 4) または (4, 3) のとき 4 辺の長さの和が最小となる。

void setup() {
  noLoop();
}

void draw() {
  int[] values = {1, 12, 25, 708, 970, 1601, 3401, 3892, 23256, 92316};
  for (int i = 0; i < values.length; ++i) {
    println(minSides(values[i]));
  }
}

問題 3

1 行に 1 つの自然数が記録されたテキストファイルを読み込み、それぞれの自然数について各桁の和を順にコンソールに表示するプログラムを作成せよ。 123 の各桁の和は 1 + 2 + 3 = 6 である。

入力例

946941
509474
570702
33923
405244
937430
511733
809289
767155
389193
336653
966171
540967
822334
394278
704189
73579
118859
468842
694552

実行結果

33
29
21
20
19
26
20
36
31
33
26
30
31
22
33
29
31
32
32
31

問題 4

x, y, z の 3 列を持った CSV ファイルが与えられる。 各要素には 0 以上 4 以下の整数が格納されている。 x, y, z それぞれの列について、その列の最頻値を 1 つ表示するように以下のプログラムを完成させよ。

数列 a において、数 v の出現回数を count[v] としたとき、count[v] が最大となるような va の最頻値である。 例えば、数列 {1, 3, 3, 2, 3, 1, 3} において、3 が 4 回出現し、それが最大であるため、この数列の最頻値は 3 である。

int mode(Table table, String columnName) {
}

void setup() {
  noLoop();
}

void draw() {
  Table table = loadTable("excercise4.csv", "header");
  String[] columns = {"x", "y", "z"};
  for (int i = 0; i < columns.length; ++i) {
    println(columns[i] + "の最頻値: " + mode(table, columns[i]));
  }
}

入力例

x,y,z
2,3,2
4,2,2
4,1,4
4,2,2
0,2,0
1,2,1
2,1,3
1,2,3
4,2,4
1,0,2
2,0,2
3,3,3
2,1,3
3,4,4
0,4,3
3,0,3
0,4,0
3,3,4
1,1,4
4,3,2

実行結果

xの最頻値: 4
yの最頻値: 2
zの最頻値: 2

問題 5

ノードを以下のように定義する。

  • ノードは namechildren の 2 つのプロパティを持つ
  • name の値は文字列である
  • children の値はノードの配列である
  • ノード x について、xchildren に含まれるノードを x の子ノードと呼ぶ

あるノード x に含まれる全てのノードの name の値を表示する処理 printAllName(x) は以下のように再帰的に定義できる。

  • 手順 1: xname の値を表示する
  • 手順 2: x の全ての子ノード y について、printAllName(y) を行う

以下のように 1 つのノードを表す JSON ファイルが与えられる。

{
  "name": "Eve",
  "children": [
    {
      "name": "Cain",
      "children": []
    },
    {
      "name": "Seth",
      "children": [
        {
          "name": "Enos",
          "children": []
        },
        {
          "name": "Noam",
          "children": []
        }
      ]
    },
    {
      "name": "Abel",
      "children": []
    },
    {
      "name": "Awan",
      "children": [
        {
          "name": "Enoch",
          "children": []
        }
      ]
    },
    {
      "name": "Azura",
      "children": []
    }
  ]
}

JSON ファイルを読み込み、そこに含まれる全てのノードの name の値を表示するようにプログラムを完成させよ。

void printAllName(JSONObject x) {
  // x の name の値を表示する

  JSONArray children = x.getJSONArray("children");
  for (int i = 0; i < children.size(); ++i) {
    // x の全ての子ノード y について、 printAllName(y) を行う

  }
}

void setup() {
  noLoop();
}

void draw() {
  JSONObject json = loadJSONObject("excercise5.json");
  printAllName(json);
}

実行結果

Eve
Cain
Seth
Enos
Noam
Abel
Awan
Enoch
Azura

results matching ""

    No results matching ""