finb Ekspert
13. maj 2020 - 12:30 Der er 21 kommentarer og
4 løsninger

9 stole, 9 personer ?

Der er 9 stole og 9 personer.
Kan personerne sidde på 9! (9 fakultet) forskellige måder ?
Hvordan kan jeg vise alle mulighederne i
Excel eller VBA ?
Tak finb
Jan K Ekspert
13. maj 2020 - 13:13 #1
9! er over 360.000 muligheder så jeg vil, annbefale VBA. Har dog ikke tid til at lave en løsning lige nu, men m0ske kan en anden hjælpe.
claes57 Ekspert
13. maj 2020 - 15:28 #2
Hvis det er omkring et rundt bord, så er der mange gentagelser (ens rækkefølge, bare forskelligt viklet).
acore Ekspert
13. maj 2020 - 15:59 #3
Ja, så er det bare 8!
Jan K Ekspert
13. maj 2020 - 17:00 #4
#3 - forstår ikke de 8. Hvis du kalder personerne ABCDEFGHI, og decskal anbringes i alle tænkelige kombinationer, må det være mere end 8.
Jan K Ekspert
13. maj 2020 - 17:05 #5
Hvis rækkefælgen de tages i er betydende (permutationer) er der 362.880 muligheder. Er rækkefølgen ligegyldig (kombinationer) er der "kun" 24.310.
Mads32 Ekspert
13. maj 2020 - 17:25 #6
Hej Jan K

Hvordan kommer du til 24310 ?

acore skriver 8! og ikke 8. ---  8! = 40320

Under alle omstændigheder tro jeg ikke at antal af placeringer kan stiles op nogle formler.

m v h mads32
acore Ekspert
13. maj 2020 - 17:32 #7
Min pointe var, at hvis det er et rundt bord (re #2), så er placeringen af den første person ligegyldig og dermed er svaret 8! i stedet for 9! hvor ! læses som fakultet.

Og hvis rækkefælgen er ligegyldig, så kan 9 personer kun placeres i 9 stole på én måde, nemlig en i hver stol.
Jan K Ekspert
13. maj 2020 - 19:10 #8
#7, Sorry. Havde overset udråbstegnet.

#6 ved at bruge en forkert funktion 🤒 men antallet af kombinationer må kunne beregnes, det er nok sværere at lave en funktion, der viser dem.
claes57 Ekspert
13. maj 2020 - 19:36 #9
min idé var, at fx "abcdefghi" er ok - men alle skift til "bcdefghia" osv "defghiabc" med mere udgår, så for hver 1 godkendt række er der 8, der udgår - så noget med 9!/9
acore Ekspert
13. maj 2020 - 20:07 #10
#9: Netop - som jeg skrev i #3 - 9!/9 = 8!
Jan K Ekspert
13. maj 2020 - 20:30 #11
Enig hvis de sidder rundt om et bord. Jeg så det for mig som 9 stole på en række.
jens48 Ekspert
14. maj 2020 - 00:07 #12
Og her er en makro, som viser alle kombinationsmulighederne, men lad være med at køre den, hvis du skal bruge Excel til noget andet den næste times tid.

Sub fact()
Application.Calculation = xlCalculationManual
Dim A, B, C, D, E, F, G, H, I, R, X As Long
R = 1
For X = 123456789 To 987654321
A = Mid(X, 1, 1)
If A = 0 Then X = X + 100000000
B = Mid(X, 2, 1)
If B = 0 Then X = X + 10000000
C = Mid(X, 3, 1)
If C = 0 Then X = X + 1000000
D = Mid(X, 4, 1)
If D = 0 Then X = X + 100000
E = Mid(X, 5, 1)
If E = 0 Then X = X + 10000
F = Mid(X, 6, 1)
If F = 0 Then X = X + 1000
G = Mid(X, 7, 1)
If G = 0 Then X = X + 100
H = Mid(X, 8, 1)
If H = 0 Then X = X + 10
I = Mid(X, 9, 1)
If I = 0 Then X = X + 1
If A <> B And A <> C And A <> D And A <> E And A <> F And A <> G And A <> H And A <> _
I And B <> C And B <> D And B <> E And B <> F And B <> G And B <> H And B <> _
I And C <> D And C <> E And C <> F And C <> G And C <> H And C <> _
I And D <> E And D <> F And D <> G And D <> H And D <> _
I And E <> F And E <> G And E <> H And E <> _
I And F <> G And F <> H And F <> _
I And G <> H And G <> I And H <> _
I And A <> 0 And B <> 0 And C <> 0 And D <> 0 And E <> 0 And F <> 0 And G <> 0 And H <> 0 And I <> 0 Then
Cells(R, 1) = X
R = R + 1
End If
Next
Application.Calculation = xlCalculationAutomatic
End Sub
xl-Enthusiast Ekspert
14. maj 2020 - 05:42 #13
Ved at lede på en gammel pc fandt jeg noget kode lavet af Excel MVP Myrna Larson tilbage i år 2000 og posteret i Microsoft.Public.Excel.Misc. Koden er lavet mens Excel kun havde 65536 rækker.

Koden genererer en liste med FACT(8) = 40320 i løbet af et splitsekund og en liste med FACT(9) = 362880 på mindre end fem sekunder. Listen indsættes i et nyt ark.
Filen er gemt som Excel 97-2003 workbook. Lav ikke om på det.

Så værsgod at se alle mulighederne finb.

https://www.dropbox.com/scl/fi/gpglkricvnadkmwc43p6o/Permutations.xls?dl=0&rlkey=ylthdn764er1si271ynya1ivr
jens48 Ekspert
14. maj 2020 - 10:14 #14
Ups. Makroen i #12 springer nogle (ca. 40.000) kombinationer over. Men denne finder alle 362800.

Sub fact()
Application.Calculation = xlCalculationManual
Dim A, B, C, D, E, F, G, H, I, R, X As Long
R = 1
For X = 123456789 To 987654321
A = Left(X, 1)
B = Mid(X, 2, 1)
C = Mid(X, 3, 1)
D = Mid(X, 4, 1)
E = Mid(X, 5, 1)
F = Mid(X, 6, 1)
G = Mid(X, 7, 1)
H = Mid(X, 8, 1)
I = Mid(X, 9, 1)
If A <> B And A <> C And A <> D And A <> E And A <> F And A <> G And A <> H And A <> _
I And B <> C And B <> D And B <> E And B <> F And B <> G And B <> H And B <> _
I And C <> D And C <> E And C <> F And C <> G And C <> H And C <> _
I And D <> E And D <> F And D <> G And D <> H And D <> _
I And E <> F And E <> G And E <> H And E <> _
I And F <> G And F <> H And F <> _
I And G <> H And G <> I And H <> _
I And B <> 0 And C <> 0 And D <> 0 And E <> 0 And F <> 0 And G <> 0 And H <> 0 And I <> 0 Then
Cells(R, 1) = X
R = R + 1
End If
Next
Application.Calculation = xlCalculationAutomatic
End Sub
finb Ekspert
14. maj 2020 - 13:12 #15
Foreløbig tak, skal lige se det igennem, vender tilbage...
tak finb
finb Ekspert
18. maj 2020 - 12:59 #16
# 14: Genial i sin enkelhed ! Tak !

Lige et tillægsspørgsmål:
Nu stiger komforten, og
stol 1, stol 2 og stol 3 deler bord 1
stol 4, stol 5 og stol 6 deler bord 2
stol 7, stol 8 og stol 6 deler bord 3

Hvis der ved fx bord 1 sidder person 1,2,3
så kan der ikke også sidde person 2,1,3
eller person 3,1,2 osv. ved bord 1.

Bord 1 må altså kun tildeles 1 konstellation af personerne 1,2,3.
Ligeså med bord 2 og 3.
Det giver selvfølgelig færre løsninger,
hvordan kan det programmeres i VBA ?
Tak finb 
(bordene er ikke runde, ha ha)
finb Ekspert
18. maj 2020 - 13:04 #17
Ser # 13 senere, tak finb
jens48 Ekspert
21. maj 2020 - 23:10 #18
Er vi enige om at der med din sidste opdeling skal være 1680 muligheder?
1680 =(9!/6!/3!)*(6!/3!/3!)
finb Ekspert
25. maj 2020 - 14:11 #19
#18
-det skal jeg lige tænke lidt over...
jens48 Ekspert
25. maj 2020 - 14:25 #20
Du får lige makroen til det. Ikke særlig elegant, men det var den eneste måde jeg kunne få det til at fungere på. Jeg laver ligesom ved den foregående alle muligheder (362880 kombinationer), men deler det op i tre kolonner, og sletter så alle dem der har de samme tal i kolonne C. Så ryger 5 af 6 ud. Så sorteres og så slettes alle der har de samme tal i kolonne B. Igen ryger 5 af 6. Til sidst det samme med kolonne A. Igen ryger 5 af 6. Den tog et par timer at køre, men kom som forventet ud med 1680 kombinationer.
1680 =(9!/6!/3!)*(6!/3!/3!)=9!/6/6/6

Sub fact()
Application.Calculation = xlCalculationManual
Dim A, B, C, D, E, F, G, H, I, R, X As Long
R = 1
For X = 123456789 To 987654321
A = Left(X, 1)
B = Mid(X, 2, 1)
C = Mid(X, 3, 1)
D = Mid(X, 4, 1)
E = Mid(X, 5, 1)
F = Mid(X, 6, 1)
G = Mid(X, 7, 1)
H = Mid(X, 8, 1)
I = Mid(X, 9, 1)
If A <> B And A <> C And A <> D And A <> E And A <> F And A <> G And A <> H And A <> _
I And B <> C And B <> D And B <> E And B <> F And B <> G And B <> H And B <> _
I And C <> D And C <> E And C <> F And C <> G And C <> H And C <> _
I And D <> E And D <> F And D <> G And D <> H And D <> _
I And E <> F And E <> G And E <> H And E <> _
I And F <> G And F <> H And F <> _
I And G <> H And G <> I And H <> _
I And B <> 0 And C <> 0 And D <> 0 And E <> 0 And F <> 0 And G <> 0 And H <> 0 And I <> 0 Then
Cells(R, 1) = A & B & C
Cells(R, 2) = D & E & F
Cells(R, 3) = G & H & I

R = R + 1
End If
Next
'Sletter alle rækker med de samme tal i kolonne C
For R = 362880 To 2 Step -1
If Cells(R, 1) = Cells(R - 1, 1) And Cells(R, 2) = Cells(R - 1, 2) Then
Rows(R).EntireRow.Delete
End If

Next
'Ny sortering
Range("A1:C1").Select
    Range(Selection, Selection.End(xlDown)).Select
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add2 Key:=Range( _
        "A1:A60480"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add2 Key:=Range( _
        "C1:C60480"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add2 Key:=Range( _
        "B1:B60480"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    With ActiveWorkbook.Worksheets("Sheet1").Sort
        .SetRange Range("A1:C60480")
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
'Sletter alle rækker med de samme tal i kolonne B
For R = 60480 To 2 Step -1
If Cells(R, 1) = Cells(R - 1, 1) And Cells(R, 3) = Cells(R - 1, 3) Then
Rows(R).EntireRow.Delete
End If
Next
'Ny sortering
  Range("A1:C1").Select
    Range(Selection, Selection.End(xlDown)).Select
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add2 Key:=Range( _
        "B1:B10080"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add2 Key:=Range( _
        "C1:C10080"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add2 Key:=Range( _
        "A1:A10080"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    With ActiveWorkbook.Worksheets("Sheet1").Sort
        .SetRange Range("A1:C10080")
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
'Sletter all rækker med de samme til i kolonne A
For R = 10080 To 2 Step -1
If Cells(R, 2) = Cells(R - 1, 2) And Cells(R, 3) = Cells(R - 1, 3) Then
Rows(R).EntireRow.Delete
End If
Next
'Ny sortering (tilbage til det oprindelige)
    Range("A1:C1").Select
    Range(Selection, Selection.End(xlDown)).Select
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add2 Key:=Range( _
        "A1:A1680"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add2 Key:=Range( _
        "B1:B1680"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add2 Key:=Range( _
        "C1:C1680"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    With ActiveWorkbook.Worksheets("Sheet1").Sort
        .SetRange Range("A1:C1680")
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

Application.Calculation = xlCalculationAutomatic
End Sub
finb Ekspert
26. maj 2020 - 12:23 #21
ad #20:
Den skal jeg lige læse, vender tilbage...

ad #18:
""1680 =(9!/6!/3!)*(6!/3!/3!)""
Jeg forstår muligvis (6!/3!/3!), men ikke helt (9!/6!/3!) ?
jens48 Ekspert
26. maj 2020 - 13:19 #22
Du tager først 3 af 9. Der er der 9!/6!/3! muligheder. Derefter tages der 3 af 6. Der giver 6!/3!/3! muligheder. Og de sidste 3 kommer i sidste gruppe. Det giver 1 mulighed. Ialt (9!/6!/3!)*(6!/3!/3!)*1
finb Ekspert
27. maj 2020 - 12:56 #23
#20 - Det er rigtig godt !
Måske omfattende løsning, med det virker !
Jeg prøver, om jeg kan koge det lidt ned.

#22 - det hjælper på forståelsen ! Tak
-Senere kommer jeg nok med et udvidet spm., men foreløbig tak !
finb
finb Ekspert
28. maj 2020 - 12:02 #24
Men hov, er det nu rigtigt ?
Den nedenstående ændrer 123,123,123 til: 123
-men ændrer den fx 123,231,321 til: 123 ?

""'Sletter alle rækker med de samme tal i kolonne B
For R = 60480 To 2 Step -1
If Cells(R, 1) = Cells(R - 1, 1) And Cells(R, 3) = Cells(R - 1, 3) Then
Rows(R).EntireRow.Delete
End If
Next""
jens48 Ekspert
28. maj 2020 - 13:50 #25
Nej, den ændrer ikke rækkefølgen i cellen til 123, den sletter alle rækker nedenunder den række, hvor der står 123. Det er betinget af den foregående sortering, således at cellen med 123 altid står øverst
Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links

Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester





Premium
"Jeg vil selv bestemme, om jeg skal ansætte fem bestemte medarbejdere, eller om mine medarbejdere skal løbe nøgne rundt om bygningen for at nå målsætningerne"
"Jeg vil selv bestemme, om jeg skal ansætte fem bestemte medarbejdere, eller om mine medarbejdere skal løbe nøgen rundt om bygningen for at nå målsætningerne."
Computerworld
Trump kræver pludselig ‘en masse penge’ for at godkende Microsofts køb af TikTok
Præsident Donald Trump siger, at USA skal have ‘en masse penge’, hvis Microsoft skal have grønt lys til at købe kinesiske TikTok. Kina truer med at svare igen.
Job & Karriere
Regner din ferie væk? Brug tiden på at søge en af disse otte stillinger, der er ledige netop nu
Det sjasker ned over hele Danmark. Du kan bruge de våde sommerdage på at søge et af disse otte job, der er ledige lige nu.
White paper
Hybrid infrastruktur giver Jutlander Banks medarbejdere mere tid til kunderne
Hos Jutlander Bank sørger den nye, hybride infrastruktur fra HPE for, at bankens kunderådgivere i dag kan bruge væsentlig mere tid hos den enkelte kunde. I denne kundecase kan du få indsigt i hvordan IT-chef Kim Meling Christensen har oplevet samarbejdet med Atea og HPE – samt hvilke kundevendte fordele og muligheder for automatisering som det har givet.