【問題例1】1~30の数字を表示せよ。ただし、3の倍数と3を含む数字に"!"をつけて表示すること。(表示例:13!)
fizzbuzzの亜種のような問題です。
「3を含む数字」という点が初見だと焦るポイントでした。
現状、以下の対応で実行できています。
「3を含む数字」という点が初見だと焦るポイントでした。
現状、以下の対応で実行できています。
- pythonではiと3をstr型にして、in演算子を適用させる。
- javascriptでも同じくString型にして、incldesを適用。
pythonで記述 学校での学びに近い記述パターン
for i in range(1,31): #30までの場合、+1した31でrangeを回す。
if not i % 3:
print("{}!".format(i))
elif str(3) in str(i): #部分一致を適用させるため、str型にしてin演算子を適用。
print("{}!".format(i))
else:
print(i)
pythonで記述 面接で添削された結果
#elif文を省略し、orでひとまとめに。
#not i % 3は汎用性が低い可能性があるため、i % 3 == 0が好ましいという指摘あり。
for i in range(1,31):
if i % 3 == 0 or str(3) in str(i):
print("{}!".format(i))
else:
print(i)
javaScriptで記述
for(let index = 1; index < 31; index++){
if (String(index).includes("3") || index % 3 == 0){ #orの意味にあたる||
console.log(index+"!")
}
else{
console.log(index)
}
}
ーpaiza: 観覧車のゴンドラの数と定員(この観覧車は珍しくてゴンドラごとに乗車定員が違う)、待っている客のグループ数とグループの人数が与えられる。グループは同じグループでしか乗車しないので、5人乗りのゴンドラでも3人のグループが来た場合には3人だけ載せます。この条件で、各々のゴンドラが載せた人数をゴンドラ別に表示してください。
cgs =[4,5,3,8]#ゴンドラの定員を入れる配列
grp = [3,10,10,5]#客のグループ人数
#二次元配列
cg = [[0 for i in range(2)] for j in range(len(cgs))]
#二次元配列の0列にゴンドラの定員を入れる(1列には乗った人数を集計する)
for i in range(len(cgs)):
cg[i][0]=cgs[i]
i = 0 #ゴンドラの制御
j = 0 #グループの制御
#1グループ毎にゴンドラに乗る人数を集計する
for j in range(len(grp)): #グループの数だけループする
if cg[i][0] >= grp[j]: #ゴンドラの定員数がグループの人数より多い場合
cg[i][1] += grp[j] #グループに人数をゴンドラの累計に加算
i += 1 #ゴンドラを一つ進める
if i > len(cgs)-1: #ゴンドラの数が上限になったら最初のゴンドラに戻る
i=0
else:
while grp[j]>0: #ゴンドラの定員数よりグループの人数が多い場合にループする
if grp[j] >= cg[i][0]: #ゴンドラの定員数よりグループの人数が多い場合
cg[i][1] += cg[i][0] #ゴンドラの定員数を累計数に加算
grp[j] -= cg[i][0] #ゴンドラに乗った人数をグループの人数から減らす
else:
cg[i][1] += grp[j] #残った人数をゴンドラの累計に加算
grp[j] = 0 #全員乗ったのでグループを0にする。whileを抜ける
i += 1
if i > len(cgs)-1:
i=0
for i in range(len(cgs)):#ゴンドラの順番に表示
print(cg[i][1])