問題 分類 難易度 説明
問題1 プログラミング基礎 1 シンプルな条件分岐と変数の代入
問題2 プログラミング基礎 1 関数の引数の数に関するエラー発見
問題3 プログラミング基礎 1 四則演算の優先順位
問題4 プログラミング基礎 1 剰余演算
問題5 プログラミング基礎 1 論理演算(AND)
問題6 プログラミング基礎 1 論理演算(NOT, OR)
問題7 アルゴリズムとデータ構造 2 二分探索木の挿入アルゴリズムの空欄補充
問題8 アルゴリズムとデータ構造 2 バブルソートの動作理解
問題9 プログラミング基礎 2 whileループの動作追跡
問題10 アルゴリズムとデータ構造 2 バブルソートのステップごとの動作理解
問題11 プログラミング基礎 2 再帰関数の動作理解
問題12 アルゴリズムとデータ構造 3 二分探索木の高さの計算
問題13 アルゴリズムとデータ構造 2 アルゴリズムの識別
問題14 プログラミング基礎 2 時間計算量の分析
問題15 プログラミング基礎 3 プログラムのトレースとISBN-10チェックデジット計算
問題16 プログラミング基礎 3 プログラムのトレースと配列の分析
問題17 アルゴリズムとデータ構造 4 マージソートの動作理解とトレース
問題18 プログラミング基礎 3 2進数の加算アルゴリズムのトレース
問題19 プログラミング基礎 4 勾配降下法を用いた線形回帰のトレース
問題20 情報セキュリティ 2 クラウドセキュリティ対策の理解

問題1

以下のプログラムを実行した場合、出力される変数xyの値は?

x = 10;
y = 5;
if x > y then {
  x = x - y;
} else {
  y = y - x;
}
print x;
print y;

問題2

次の擬似言語のコードに1か所だけエラーがある場合、①~③のうち、どの行がエラーとなる?

function multiply(x, y) { //①
    return x * y; //②
}
print(multiply(5)); //③

問題3

次の演算結果は?

5 + 3 * 2

問題4

次の演算結果は?

7 % 3

問題5

次の条件式の結果は?

(5 > 3) AND (4 < 2)

問題6

次の条件式の結果は?

NOT(TRUE) OR FALSE

問題7

以下は二分探索木に要素を挿入するアルゴリズムの擬似コードです。空欄(a)を適切に埋めてください。

function insert(root, value)
    if root is null then
        return new Node(value)
    end if

    if value < root.value then
        root.left = insert(root.left, value)
    else if value > root.value then
        root.right = __(a)__
    end if

    return root
end function

問題8

次の擬似コードは何を実行するものか、最も適切なものを選んでください

function bubbleSort(arr) {
    for i ← 0 to length(arr) - 1 do {
        for j ← 0 to length(arr) - i - 1 do {
            if (arr[j] > arr[j + 1]) {
                swap(arr[j], arr[j + 1])
            }
        }
    }
}

A) 配列の逆順ソート
B) 配列の昇順ソート
C) 配列の降順ソート
D) 配列の重複削除

問題9

以下の擬似言語で書かれたプログラムの出力を答えてください。

x = 5
y = 3
while x > 0 do
    y = y + x
    x = x - 1
end while
print y

問題10

次の配列をバブルソートで昇順に並べ替えた場合、2回目のパスが終了した時点での配列の状態を選んでください。
初期配列: [64, 34, 25, 12, 22, 11, 90]

A) [25, 12, 22, 11, 34, 64, 90]
B) [25, 12, 22, 34, 11, 64, 90]
C) [34, 25, 12, 22, 11, 64, 90]
D) [34, 25, 12, 22, 11, 90, 64]

問題11

以下の関数が計算する値はどのようなものか、選んでください

function mystery(n)
    if n == 0 then
        return 1
    else
        return n * mystery(n - 1)
    end if
end function

A) nの階乗
B) nの2乗
C) nの累乗
D) フィボナッチ数列のn番目の値

問題12

二分探索木において、以下の順序で要素を挿入した場合の木の高さは?

挿入順序: 50, 30, 70, 20, 40, 60, 80

問題13

以下の擬似コードが表すアルゴリズムは?

function algorithm(arr, target)
    left = 0
    right = length(arr) - 1
    while left <= right do
        mid = (left + right) / 2
        if arr[mid] == target then
            return mid
        else if arr[mid] < target then
            left = mid + 1
        else
            right = mid - 1
        end if
    end while
    return -1
end function

A) 線形探索
B) バブルソート
C) 二分探索
D) クイックソート

問題14

以下のプログラムの時間計算量は?

for i = 1 to n do
    for j = 1 to n do
        print i * j
    end for
end for

A) O(n)
B) O(n log n)
C) O(n^2)
D) O(2^n)

問題15

以下の擬似コードは、ISBN-10のチェックデジットを計算するプログラムです。このプログラムの実行をトレースし、各ステップでの変数の値を追跡してください。

function calculateISBN10CheckDigit(isbn)
    sum = 0
    weight = 10
    
    for i = 0 to 8 do
        digit = integer(isbn[i])
        sum = sum + (digit * weight)
        weight = weight - 1
    end for
    
    remainder = sum mod 11
    checkDigit = 11 - remainder
    
    if checkDigit == 10 then
        return "X"
    else if checkDigit == 11 then
        return "0"
    else
        return string(checkDigit)
    end if
end function

isbn = "020161586"
result = calculateISBN10CheckDigit(isbn)
print result

トレース表を完成させてください:

ステップ処理内容sumweightdigitremaindercheckDigit
1初期化010
2i=0の処理_________
3i=1の処理_________
4i=2の処理_________
10i=8の処理_________
11余りの計算___1___
12チェックデジット計算___1______
13結果の判定___1______

最終的な出力結果:____

問題16

以下の擬似コードは、整数の配列を受け取り、その配列の要素の合計、最大値、最小値を計算する関数です。このプログラムの実行をトレースし、各ステップでの変数の値を追跡してください。

function analyzeArray(arr, size)
    sum = 0
    max = arr[0]
    min = arr[0]
    
    for i = 0 to size - 1 do
        sum = sum + arr[i]
        
        if arr[i] > max then
            max = arr[i]
        end if
        
        if arr[i] < min then
            min = arr[i]
        end if
    end for
    
    average = sum / size
    
    return [sum, average, max, min]
end function

numbers = [4, 2, 7, 1, 5]
result = analyzeArray(numbers, 5)
print "Sum:", result[0]
print "Average:", result[1]
print "Max:", result[2]
print "Min:", result[3]

トレース表を完成させてください

ステップ処理内容summaxminiarr[i]
1初期化044
2i=0の処理_________04
3i=1の処理_________12
4i=2の処理_________27
5i=3の処理_________31
6i=4の処理_________45
7平均計算_________

最終的な出力結果:
Sum: ____
Average: ____
Max: ____
Min: ____

問題17

以下の擬似コードの実行結果は?

INF = 1000

function merge(A, left, mid, right)
    nl = mid - left
    nr = right - mid
    L = new array of size nl + 1
    R = new array of size nr + 1
    
    for i = 0 to nl - 1
        L[i] = A[left + i]
    for i = 0 to nr - 1
        R[i] = A[mid + i]
    
    L[nl] = INF
    R[nr] = INF
    
    i = 0
    j = 0
    for k = left to right - 1
        if L[i] <= R[j]
            A[k] = L[i]
            i = i + 1
        else
            A[k] = R[j]
            j = j + 1

function mergeSort(A, left, right)
    if left < right - 1
        mid = (left + right) / 2
        mergeSort(A, left, mid)
        mergeSort(A, mid, right)
        merge(A, left, mid, right)

A = [38, 27, 43, 3, 9, 82, 10]
mergeSort(A, 0, 7)
print A

問題18

以下の擬似コードは、2つの2進数文字列を受け取り、その和を計算するプログラムです。このプログラムの実行をトレースし、各ステップでの変数の値を追跡してください。

int():整数への変換
str():文字列への変換
carryには小数点以下切り捨ての整数が入るものとする。

function addBinary(a, b)
    result = ""
    carry = 0
    i = length(a) - 1
    j = length(b) - 1

    while i >= 0 or j >= 0 or carry > 0
        sum = carry

        if i >= 0
            sum = sum + int(a[i])
            i = i - 1

        if j >= 0
            sum = sum + int(b[j])
            j = j - 1

        result = str(sum % 2) + result
        carry = sum / 2

    return result

a = "1011"
b = "1010"
sum = addBinary(a, b)
print sum

トレース表を完成させてください

ステップijcarrysumresult
初期状態330“”
1回目22_________
2回目11_________
3回目00_________
4回目-1-1_________
5回目-1-1_________

最終的な出力結果:____

問題19

以下の擬似コードは、単純な線形回帰モデルを実装し、勾配降下法を用いてパラメータを最適化するプログラムです。このプログラムの実行をトレースし、各ステップでの変数の値を追跡してください。

function predict(x, w, b)
    return w * x + b

function compute_gradient(X, Y, w, b)
    n = length(X)
    dw = 0
    db = 0
    for i = 0 to n-1
        f_x = predict(X[i], w, b)
        dw = dw + 2 * (f_x - Y[i]) * X[i]
        db = db + 2 * (f_x - Y[i])
    dw = dw / n
    db = db / n
    return dw, db

function train(X, Y, learning_rate, num_iterations)
    w = 0
    b = 0
    for i = 0 to num_iterations-1
        dw, db = compute_gradient(X, Y, w, b)
        w = w - learning_rate * dw
        b = b - learning_rate * db
    return w, b

X = [1, 2, 3, 4, 5]
Y = [2, 4, 5, 4, 5]
learning_rate = 0.01
num_iterations = 100

final_w, final_b = train(X, Y, learning_rate, num_iterations)
print "Final w:", final_w
print "Final b:", final_b

トレース表を完成させてください(最初の1回のイテレーションのみ):

イテレーションwbdwdb
初期状態00
1回目____________

問題20

以下の文章を読み、設問に答えてください。

クラウドサービスの利用が増加する中、企業A社は業務効率化のためにクラウドストレージサービスの導入を検討している。しかし、情報セキュリティ部門は、クラウドサービス利用に伴うセキュリティリスクを懸念している。
A社の情報セキュリティ責任者は、以下の対策を提案した:
1.クラウドサービスプロバイダの選定基準を策定し、セキュリティ認証(ISO 27001など)を取得しているプロバイダを優先する。
2.クラウドに保存するデータの分類を行い、機密性の高い情報については暗号化を義務付ける。
3.社員のクラウドサービス利用に関するガイドラインを作成し、定期的なセキュリティ教育を実施する。
4.クラウドサービスへのアクセスには多要素認証を導入し、不正アクセスのリスクを低減する。
5.クラウド上のデータに対して定期的なバックアップを実施し、別の場所に保管する。
6.クラウドサービスの利用状況を監視し、異常なアクセスパターンを検知するシステムを導入する。
これらの対策を実施することで、A社はクラウドサービスの利点を活かしつつ、情報セキュリティリスクを軽減することを目指している。

上記の対策のうち、主に「機密性」の確保に寄与するものを2つ選んでください。