Pomysł na zadanie w którym dostajemy liczbę diementów w parach skrzyń i mamy odpowiedzięć ile jest w poszczególnej

0

Mam takie zadanie: https://szkopul.edu.pl/c/arch[...]VmvKxyhkM/site/?key=statement
Nie wiem kompletnie jak do tego podejść, moglibyście mi dać jakieś podpowiedzi ?

0

Pięć skrzyń. Ile par skrzyń?
(5) // to ma być symbol Newtona ;)
(2)
= 5!/(2!(5-2)!) = 10

Skrzynie a, b, c, d, e
Liczby diamentów w parach skrzyń d1, d2, d3.... d10
a + b = d1
a + c = d2
a + d = d3
a + e = d4

b + c = d5
b + d = d6
b + e = d7

c + d = d8
a + e = d9

d + e = d10

Wychodzi układ 10 równań z 5 niewiadomymi.

Poprawka
A jednak nie o to chodzi, ponieważ:
https://www.wolframalpha.com/[...]8%2C+c%2Be%3D14%2C+d%2Be%3D14

Trzeba by rozwiązać 10! = 3 628 800 układów równań, żeby znaleźć wszystkie możliwe permutacje d1, d2, ... d10.

Dla 3
https://www.teachsecondary.co[...]lan-ks3-maths-arithmagons.pdf
Dla 4
https://www.foster77.co.uk/Fo[...]Plus,%20Sums%20of%20Pairs.pdf
Dla 5
dla 5 Pan Matematyk dr nauk nie umieścił w sieci

Sorry, ja mówię pass :)

2

Załóżmy, że mamy 5 liczb, są one różne, a zatem mamy tu pewien porządek:

a < b < c < d < e

z tego wynika, że:


a+b = MIN

d+e = MAX

min i max na podstawie wejściowych wartości mogę znaleźć

na razie nic mi to nie da, ale jeśli policzymy sumę, a można ją policzyć:

suma = wszystko / 2

to mogę wtedy wyliczyć środkowy element:

c = suma - MIN - MAX

a teraz od każdej wejściowej odejmuje c
dwie najmniejsze dodatnie wartości to a, ta ciut większa to b

niemal analogicznie rozpoznanie robię po drugiej stronie by rozpoznać d , e

EDIT, załączam przykład w pythonie:

xs = [10,12,16,10,6,12,18,8,14,14]
s = sum(xs) / 4
a_b = min(xs)
d_e = max(xs)

c = s - a_b - d_e
print(c)

diffs = sorted([x - c for x in xs if x - c > 0])

a = diffs[0]
b = diffs[1]
d = diffs[-2]
e = diffs[-1]

print(a, b, c, d, e)
1
pan_krewetek napisał(a):

a teraz od każdej wejściowej odejmuje c
dwie najmniejsze dodatnie wartości to a, ta ciut większa to b

Jeżeli skrzynie mają wartości od 1 do 5, to największa suma wyniesie 9, odejmiesz 3 i wyjdzie 6 (co jest niepoprawne).

Jak znajdziesz c, to następnie bierzesz dwie największe wartości M1 i M2, ich różnica M1 - M2 to różnica d - c. Masz już c, więc wyliczasz d. Potem wyliczenie e jest trywialne. Analogicznie dla najmniejszych wartości.

import itertools

elems = sorted([2, 5, 11, 30, 51])
xs = sorted([x[0] + x[1] for x in itertools.product(elems, elems) if x[0] < x[1]])

print(elems)
print(xs)

s = sum(xs) / 4
a_b = min(xs)
d_e = max(xs)

c = s - a_b - d_e

M1 = xs[-1]
M2 = xs[-2]
d = c + (M1 - M2)
e = M1 - d

m1 = xs[0]
m2 = xs[1]
b = c - (m2 - m1)
a = m1 - b

recoveredElems = [a, b, c, d, e]
recoveredXs = sorted([x[0] + x[1] for x in itertools.product(recoveredElems, recoveredElems) if x[0] < x[1]])

print(recoveredElems)
print(recoveredXs)

print(recoveredElems == elems)
print(recoveredXs == xs)
0

Przechodzi na 100pkt

#!/bin/python3
def main():
    tab = sorted([int(input()) for i in range(10)])
    skrzynie = [0, 0, 0, 0, 0]
    skrzynie[2] = (sum(tab) / 4) - tab[0] - tab[-1]
    skrzynie[0] = tab[1] - skrzynie[2]
    skrzynie[1] = tab[0] - skrzynie[0]
    skrzynie[3] = tab[2] - skrzynie[0] if tab[2] != skrzynie[1] + skrzynie[2] else tab[3] - skrzynie[0]
    skrzynie[4] = tab[-1] - skrzynie[3]
    print(int(skrzynie[int(input()) - 1]))
main()

:D

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0