Ich war gestern in der Dusche, und eine Idee traf mich. Es ist ein mathematisches Muster oder eine Reihe von Regeln, um eine Liste von ganzen Zahlen zu finden.Ein praktisch irrelevanter, nur leicht interessanter Algorithmus und wie kann ich die Logik zum Funktionieren bringen?
Die praktische Anwendung dieses Musters oder wie immer man es nennen könnte, liegt an den Super-Mathematikern, ich wollte nur sehen, ob ich ein Programm machen könnte, das es finden könnte.
Im Moment benutze ich VB.net, da ich es jetzt für die Universität benutzen muss, aber ich bin auch offen für C++.
So sind die Regeln dieses Musters sind:
Sie erhalten einen Integer als „Faktor“, und multiplizieren sie mit sich selbst so oft wie Sie möchten. Dadurch wird eine Liste von Zahlen erstellt, die Sie als Namespaces oder als "Container" bezeichnen.
Wenn der Faktor 2 wäre, würde die Liste wie folgt aussehen - 4, 8, 16, 32, 64 usw. (mit Ausnahme des Basisfaktors).
Jetzt unter jedem Punkt der Liste platzieren Sie alle ganzen Zahlen, die darin passen könnten. Wenn die Nummer des Containers beispielsweise 8 ist, würde jede Nummer von 1 bis 7 aufgelistet.
Die Regeln gehen jedoch weiter.
Eine Nummer innerhalb des Containers kann nicht aufgelistet werden, wenn;
- es = 1 oder 2
- es = jede Zahl in dem Behälter, bevor
- = es ist der Faktor vor
- oder ist durch eine beliebige Anzahl in dem Behälter vor teilbar.
Zum Beispiel
[4]-[8]-[16]-[32]
3 7 13 31
5 12 29
11 26
9 25
6 23
4 19
3 17
14
10
7
5
Wie Sie die Zahlen sehen Sie bekommen immer unterschiedlich sind. So arbeitete ich an einem Formular in VS 2015, mit dem Sie den Faktor und die Anzahl der Iterationen (wie lange die Liste lief) in die Liste eingeben konnten.
Das Problem ist, wie Sie vielleicht von der Tatsache erraten werden, dass ich das tatsächlich an erster Stelle mache, ist, dass meine Logik nicht so großartig ist. Als Programmierer bin ich ein Anfänger, und als logischer Denker bin ich nicht der Beste.
Siehe unten, was ich bisher ausprobiert habe. Es ist genau das, was zwischen dem Button Unter war:
Dim iteration As Integer = EtrIterationCount.Text
Dim factor As Integer = EtrNumericFactor.Text
Dim Container()() As Integer = New Integer(iteration)() {}
ReDim Container(iteration)(1)
Dim Contents() As Integer = New Integer() {}
Dim Base As Integer = factor
For X = 1 To iteration - 1
Container(X)(1) = New Integer()
Base = Base * factor
Container(X)(0) = Base
Next
Container(0)(0) = factor
For X = 0 To iteration - 1
Dim Test As Integer = Container(X)(0)
Dim Num = Test
For Num = Num To 0 Step -1
If X = 0 Then
For W = Num To 0 Step -1
If Not Test = 1 Then
Contents(W) = Test
End If
Next
Array.ConstrainedCopy(Contents, Contents.Length, Container, Container(X)(1), Contents.Length)
ElseIf X >= 1 Then
For W = Num To 0 Step -1
For J = 0 To Contents.Length - 1
If Not Contents(J) Mod Container(X - 1)(1) = 0 Then
If Not Test = 1 And Test = Container(X)(0) And Contents.Contains(Test) Then
Contents(W) = Test
End If
End If
Next
Next
Array.ConstrainedCopy(Contents, Contents.Length, Container, Container(X)(1), Contents.Length)
End If
Test = Test - 1
MsgBox(Container(X)(1))
Next
Next
Was ich im Grunde versucht zu tun, etwas, das ich habe vorher noch nie gemacht, und eine gezackte/verschachtelte Array erstellen, die erste Anordnung, die als Behälter Angebot alle Iterationen und die erste Zeile mit den faktorierten Zahlen, die zweite Zeile mit dem Array mit der Werteliste.
Es wurde von einem ersten vorgeschlagen, dass ich Vectors oder eine Klasse von Vektoren verwende, um dieses Problem zu lösen, aber ich habe nicht das foggiest, wie man das macht.
Wenn überhaupt, möchte ich, dass dies Praxis ist, wie man mit Arrays umgeht und mir vielleicht eine Logik beibringt, die ich vermisse.
Ihre zweite Regel wird von der vierten Regel abgedeckt; Ersteres wäre nur dann sinnvoll, wenn der Code wesentlich teurer wäre. –