問題 | 分類 | 難易度 | 説明 |
---|---|---|---|
問題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
以下のプログラムを実行した場合、出力される変数x
とy
の値は?
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
トレース表を完成させてください:
ステップ | 処理内容 | sum | weight | digit | remainder | checkDigit |
---|---|---|---|---|---|---|
1 | 初期化 | 0 | 10 | – | – | – |
2 | i=0の処理 | ___ | ___ | ___ | – | – |
3 | i=1の処理 | ___ | ___ | ___ | – | – |
4 | i=2の処理 | ___ | ___ | ___ | – | – |
… | … | … | … | … | – | – |
10 | i=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]
トレース表を完成させてください
ステップ | 処理内容 | sum | max | min | i | arr[i] |
---|---|---|---|---|---|---|
1 | 初期化 | 0 | 4 | 4 | – | – |
2 | i=0の処理 | ___ | ___ | ___ | 0 | 4 |
3 | i=1の処理 | ___ | ___ | ___ | 1 | 2 |
4 | i=2の処理 | ___ | ___ | ___ | 2 | 7 |
5 | i=3の処理 | ___ | ___ | ___ | 3 | 1 |
6 | i=4の処理 | ___ | ___ | ___ | 4 | 5 |
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
トレース表を完成させてください
ステップ | i | j | carry | sum | result |
---|---|---|---|---|---|
初期状態 | 3 | 3 | 0 | – | “” |
1回目 | 2 | 2 | ___ | ___ | ___ |
2回目 | 1 | 1 | ___ | ___ | ___ |
3回目 | 0 | 0 | ___ | ___ | ___ |
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回のイテレーションのみ):
イテレーション | w | b | dw | db |
---|---|---|---|---|
初期状態 | 0 | 0 | – | – |
1回目 | ___ | ___ | ___ | ___ |
問題20
以下の文章を読み、設問に答えてください。
クラウドサービスの利用が増加する中、企業A社は業務効率化のためにクラウドストレージサービスの導入を検討している。しかし、情報セキュリティ部門は、クラウドサービス利用に伴うセキュリティリスクを懸念している。
A社の情報セキュリティ責任者は、以下の対策を提案した:
1.クラウドサービスプロバイダの選定基準を策定し、セキュリティ認証(ISO 27001など)を取得しているプロバイダを優先する。
2.クラウドに保存するデータの分類を行い、機密性の高い情報については暗号化を義務付ける。
3.社員のクラウドサービス利用に関するガイドラインを作成し、定期的なセキュリティ教育を実施する。
4.クラウドサービスへのアクセスには多要素認証を導入し、不正アクセスのリスクを低減する。
5.クラウド上のデータに対して定期的なバックアップを実施し、別の場所に保管する。
6.クラウドサービスの利用状況を監視し、異常なアクセスパターンを検知するシステムを導入する。
これらの対策を実施することで、A社はクラウドサービスの利点を活かしつつ、情報セキュリティリスクを軽減することを目指している。
上記の対策のうち、主に「機密性」の確保に寄与するものを2つ選んでください。