4月3日の実習生の筆記試験の問題と解答(python)をつづります


4月3日にたくさんの筆記試験問題をしました.まずテーマを以下に述べて、読者が自分で試してみるのに便利です.以下、自分の考えを説明し、コードを貼り付けます.記憶によるものなので、題名とは異なるかもしれませんが、意味は間違いありません.4問の時間統一はすべてC/C++1秒その他の2秒です
第1題:2つのペアの差が最小です.n(nは偶数)個の数があり、それを2対にして合計し、得られたn/2個と中最大値と最小値の差はvalueであり、valueの最小値はいくらであるかを問う.入力説明:第1の行為数の個数n、第2の行為スペースで区切られたn個の数.出力説明:最小値を出力する
第二題:整数の乗算.1つの配列に0~9の10個の数字が保存されています.最大使用可能な回数です.また、2つの数AとB、A、Bが使用する0-9の数は配列の制限を超えてはいけません.A、Bの積の最小はいくらですか.説明を入力:第1の動作配列、第2の動作Aのビット数、第3の動作Bのビット数.出力摘要:最小積を出力します.(表現がはっきりしない可能性があるので説明します.配列中の数xの値がyであれば、A,Bを合わせると最大y回のxが現れる)
第三題:靴下.n本の靴下があり、各靴下には色を表す数値があり、朝起きてランダムに2本の靴下を取り出し、靴下の色の差がd以下であれば、靴下を1足作ることができることを示しています.靴下を作る確率を聞く.入力説明:第1の動作は靴下の色の配列を表し、第2の動作差d.出力説明:6ビットdouble型数を出力します.
第四題:LeetCode 72題原題.この問題にもコードがありません.
第1題:2つのペアの差が最小です.n(nは偶数)個の数があり、それを2対にして合計し、得られたn/2個と中最大値と最小値の差はvalueであり、valueの最小値はいくらであるかを問う.入力説明:第1の行為数の個数n、第2の行為スペースで区切られたn個の数.出力説明:最小値を出力する
# -*- coding:utf8 -*-
#         
#   :        ,       ,    。                   
n = int(input())
line = input().strip().split()
arr = list(map(int, line))
arr.sort()
adds = [arr[i] + arr[-i-1] for i in range(n//2)]
print(max(adds)-min(adds))

第二題:整数の乗算.1つの配列に0~9の10個の数字が保存されています.最大使用可能な回数です.また、2つの数AとB、A、Bが使用する0-9の数は配列の制限を超えてはいけません.A、Bの積の最小はいくらですか.説明を入力:第1の動作配列、第2の動作Aのビット数、第3の動作Bのビット数.出力摘要:最小積を出力します.(表現がはっきりしない可能性があるので説明します.配列中の数xの値がyであれば、A,Bを合わせると最大y回のxが現れる)
前の3題はこの問題だけではちょっと難しいです.
# -*- coding:utf8 -*-
#      
#   :    。   lenA<=lenB。   0  A     。           。      A B   。         
def mul(nums, na, nb):
    if na <= nums[0]:
        return 0  #   A  0,       0
    number = ''
    for i in range(1, 10):
        number = number + str(i)*nums[i]  #                  
    a = ''
    na = na - nums[0]  #  0  A     na   0   
    b = ''
    j = 0
    while na > 0 and nb > 0:  #          A B   
        a = a + number[j]
        j += 1
        na -= 1
        b = b + number[j]
        j += 1
        nb -= 1
    b = b + number[j:j+nb]  #        B  
    a = int(a)
    b = int(b)
    return a * b

line1 = input().strip().split()
nums = list(map(int, line1))
na = int(input())
nb = int(input())
if na > nb:
    na, nb = nb, na  #   na<=nb
res = mul(nums, na, nb)
print(res)

第三題:靴下.n本の靴下があり、各靴下には色を表す数値があり、朝起きてランダムに2本の靴下を取り出し、靴下の色の差がd以下であれば、靴下を1足作ることができることを示しています.靴下を作る確率を聞く.入力説明:第1の動作は靴下の色の配列を表し、第2の動作差d.出力説明:6ビットdouble型数を出力します.
# -*- coding:utf8 -*-
#   
#       ,       
line = input().strip().split()
lens = len(line)
for i in range(lens):
    num = ''
    for j in line[i]:
        if j.isdigit():
            num += j
    line[i] = int(num)
d = int(input())
s = line
# s.sort()
numbers = lens*(lens-1)/2
cnt = 0
for i in range(lens-1):
    for j in range(i, lens):
        if abs(s[i]-s[j]) <= d:
            cnt += 1
res = cnt/numbers
print('%.6f'%res)