[5問]完全探索問題01


完全プローブタイプは、すべての場合に試行されるタイプです.与えられた問題の要求を実現できる能力が重要であるようだ.

这是白骏2501号。



ソリューション


n,kの値が得られ,forゲートをnに変換し,1〜nの数をnで割った動作を行った.残りが0の場合、nの約数であり、リストに個別に列挙される.次に、k番目の小さい約数をリストに出力するために、インデックスはk-1(インデックスは0から始まるため)であり、リスト要素が抽出される.

私が書いたコード

n, k = map(int,input().split(' '))
lst =[]

for i in range(1,n+1):
    if n % i == 0:
        lst.append(i)

if len(lst) < k:
    print(0)
else:
    print(lst[k-1])

这是白峻16561号。



ソリューション


nが9(3 x 3)の場合,方法の個数は1である.
nが12(3 x 4)の場合,方法の個数は3である.
nが15(3 x 5)の場合,方法の個数は6である.
nが18(3 x 6)の場合,方法の個数は10である.
1は1,3は1+2,6は1+2+3,10は1+2+3+4であるため,この規則性を一般化し,n // 3をkと呼ぶ場合,方法の個数は(k-2)*(k-3)/2である.

私が書いたコード

n = int(input()) // 3
result = int((n-1)*(n-2)/2)
print(result)

我是白俊2798号。



ソリューション


第3章でa,b,cと呼ぶと,すべての場合の数字が計算され,M未満の値で最も値が出力される.

私が書いたコード

import sys

n, m = map(int,sys.stdin.readline().split(' '))
cards = list(map(int,sys.stdin.readline().split(' ')))
result = []

for a in range(0,n-2):
    for b in range(a+1, n-1):
        for c in range(b+1, n):
             sum_cards = cards[a] + cards[b] + cards[c]
             if sum_cards <= m:
                result.append(sum_cards)

print(max(result))

白俊2231号。



ソリューション


問題の要求条件に従って体現した.二つの方法で解いた.1つの方法はfor文で解決され、もう1つの方法は、各ビット数の和をリストにすることである.
後の解題方法は思いもよらなかったので、学ぶことができます.Pythonを有効に使っているような気がします.確かに、forゲートよりも時間と長さを短縮する効率的なコードです.

私が作成したコード-方法1

number = input()

for i in range(1,int(number)+1):
    each_num_sum = 0
    i = str(i)
    for j in range(len(i)):
        each_num_sum += int(i[j])
        div_sum = int(i) + each_num_sum
    if div_sum == int(number):
        print(int(i))
        break
    elif int(i) == int(number):
        print(0)

私が書いたコード-方法2

number = int(input())
result = 0
for i in range(1, number+1):
   each_num_lst= list(map(int, str(i)))  # 각 자리 수를 리스트에 담는다.
   div_num = i + sum(each_num_lst)
   if div_num == number:
       print(i)
       break
   if i == number:
       print(0)

我是白俊2309号。



ソリューション


同様に問題が要求する条件を体現している.結果はすべての状況を探る問題だが、7人の矮人を探すのではなく、2人の矮人ではない矮人を見つけることだ.

私が書いたコード

dwarf = [int(input()) for _ in range(9)]
not_dwarf1, not_dwarf2 = 0,0
first_break = True
        
for i in range(9):

   if first_break == False:
       break
   
   for j in range(1,8):        
       not_dwarf = dwarf[i]+dwarf[j]
       if sum(dwarf) - not_dwarf == 100:
           not_dwarf1 = dwarf[i]
           not_dwarf2 = dwarf[j]
           first_break = False    
           break
      
dwarf.remove(not_dwarf1)
dwarf.remove(not_dwarf2)
dwarf = sorted(dwarf)

print('\n'.join(map(str,dwarf)))