Spielplan Algorithmus

mavinatic

Bekanntes Mitglied
Hallo ich möchte einfach zur Übung eine algorithmische Aufgabe lösen, aber trotz Zeichnungen auf dem Papier und vieler Versuche bekomme ich nicht mal die Spielpaarungen in einer einfachen Version zusammen.

Mein Anfang ist momentan so:

Java:
String[] teams = new String[] { "Team 1", "Team 2", "Team 3", "Team 4", "Team 5", "Team 6" };
	
	public Generator()
	{
		for(int i=1;i<(teams.length/2) ;i++)
		{
			System.out.println(teams[i]+":"+teams[i*2]);
		}
	}

Aber irgendwie funktioniert das nicht wirklich, ich möchte nicht das ihr mir irgendeinen fertigen Algorithmus vorlegt, sondern mir eher Hinweise oder Tipps gebt. Just hints :p Ich habe schon seiten im Internet gefunden, aber momentan hänge ich eher an den simpelsten Aufgaben.

So far george :)
 

mavinatic

Bekanntes Mitglied
ich idiot^^ jah du hast recht bei 0 sollte es beginnen, damit ich auch schonmal alle teams drin hab :)
das problem ist nur:

wenn ich bei 0 anfange dann spielt die gleiche mannscahft quasi gegen sich selbst!?

for(int i=0; i<Anzahl der Mannschaften n-1; i++)
{
team : team[i*2]
}

bei i=0 wäre das team[0] : team[0*2] also gegen sich selber :O das ist etwas komisch
 

mavinatic

Bekanntes Mitglied
wie bist du denn darauf gekommen? ist es nun allgemeingültig für die anzahl der teams N?
Bei 8 Teams sieht zumbeispiel der spielplan so aus:

Team 1 - Team 4
Team 2 - Team 5
Team 3 - Team 6
Team 4 - Team 7
 

eRaaaa

Top Contributor
Die Frage ist ja, wie genau soll der Spielplan aussehen? So was kann ganz schnell nicht so ganz trivial werden :)
Ich hatte hier schon mal eine Seite gepostet, wo so etwas sehr gut erklärt ist meiner Meinung nach!

Vllt. hilft dir das ja? Ansonsten erkläre doch mal, wie genau deine Paarungen aussehen sollen: jeder gegen jeden? Abwechselnd heim-auswärts usw. ? :)
 

diggaa1984

Top Contributor
nein passt genau auf dein beispiel :) .. der summand hinter dem + entspricht der hälfte der gesamten teamanzahl .. also bei 8 teams +4 bei 4 teams +2 ... deine schleife läuft ja nur bis zur hälfte, entsprechend musst du den summanden setzen, dass du die erste paarung auch mit der 1. mannschaft und der ((N/2) +1). mannschaft hast :)

das is aber einfache mathematik .. da müsstest selbst drauf kommen

edit: und was mein vorredner anspricht ist dann schon nicht mehr ganz sooo simpel
 

mavinatic

Bekanntes Mitglied
jah die seiten hatte ich schon aber ich komme einfach nicht dahinter...ich verstehe das bei 6 Teams quasi dieses 5Eck(ich komme nicht auf die bezeichnung) ist und es immer ne "runde" weiter dreht...das hab ich verstanden aber ich bekomme es nicht hin den 1.Spieltag zugestalten das jeder gegen jeden spielt.

Am Ende soll es mit hin und rückrunde sein... :)
 

mavinatic

Bekanntes Mitglied
also so:

Java:
for(int i=0;i<teams.length/2 ;i++)
		{
			System.out.println(teams[i]+ " - " +teams[i+teams.length/2]);
		}

dann kommt folgener Plan bei raus, welcher auch stimmt :)

Team 1 - Team 5
Team 2 - Team 6
Team 3 - Team 7
Team 4 - Team 8

Ich bin echt schlecht in Mathe und so deswegen mach ich ja solche algorithmischen Übungen damit ich das auf die Reihe bekomme versteht ihr?

Sorry für den DOPPELPOST!

___________________________________________________
Das kommende Problem ist jetzt die Paarungen durchzuspielen :O Ich habe noch nicht ganz so die idee :O
 
Zuletzt bearbeitet:

eRaaaa

Top Contributor
Das kommende Problem ist jetzt die Paarungen durchzuspielen :O Ich habe noch nicht ganz so die idee :O

Was möchtest du denn jetzt von uns hören? Seiten wo Algos vorgestellt werden helfen dir anscheinend nicht, Beispiele/einen Algo wie man es machen könnte willst du nicht sehen, eine konkrete Frage stellen tust du auch nicht ?! Wie sollen wir dir jetzt helfen ? :)
 

mavinatic

Bekanntes Mitglied
Verdammt. Ja ich habe mir überlegt:

Java:
for(int i=0; i<2; i++)
		{
			System.out.println((i+1)+". Spieltag");
			for(int j=0;j<teams.length/2 ;j++)
			{
				System.out.println(teams[j+i]+ " - " +teams[j+teams.length/2+i]);
			}
		}

aber da ich out of bounds bin beim array?! argh :p Welchen Tipp könntet ihr mir geben?
 

lumo

Top Contributor
Spielplan generierung ist mein Plan :) für n-1 spieltage :)

dabei solltest du aber bedenken dass die spiele so eingeteilt werden, dass möglichst viel zeit zwischen den spielen der mannschaften ist (nicht dass eine mannschaft zwei spiele gleich hintereinander hat...)

zum schluss sollte ja ein baum rauskommen oder??

Code:
[
	Round #1
[[Team 1] Vs [Team 6], [Team 2] Vs [Team 5], [Team 3] Vs [Team 4]], 
	Round #2
[[Team 6] Vs [Team 3], [Team 2]], 
	Round #2
[[Team 6] Vs [Team 2]]]
and the winner is: [Team 6]

Code:
package tt.at.lumo.matchmaker;

import java.util.LinkedList;
import java.util.List;
import java.util.Random;

public class MatchingAlgorithmus {

	List<Team> teams = new LinkedList<Team>();
	List<Round> rounds = new LinkedList<Round>();
	public final static Random r = new Random(System.currentTimeMillis());

	public MatchingAlgorithmus() {
	}

	public MatchingAlgorithmus(int numberOfTeams) {
		for (int i = 1; i < numberOfTeams + 1; i++) {
			teams.add(new Team(i));
		}

		Round r = new Round(teams);
		rounds.add(r);
		while (!r.isFinalRound()) {
			r = r.getNextRound();
			rounds.add(r);
		}
	}

	@Override
	public String toString() {
		return rounds.toString() + "\nand the winner is: "
				+ rounds.get(rounds.size() - 1).teams.get(0);
	}

	public static void main(String[] args) {
		System.out.println(new MatchingAlgorithmus(6));
	}

	public static <E> List<E> reverseList(List<E> list) {
		List<E> reverted = new LinkedList<E>();
		for (int i = 0; i < list.size(); i++) {
			reverted.add(list.get(list.size() - i));
		}
		return reverted;
	}
}

class Team {
	int number = -1;

	public Team(int name) {
		super();
		this.number = name;
	}

	@Override
	public String toString() {
		return "[Team " + number + "]";
	}
}

class Vs {
	public Team team1;
	public Team team2;

	public Vs(Team team1, Team team2) {
		super();
		this.team1 = team1;
		this.team2 = team2;
	}

	public Team getWinner() {
		if (MatchingAlgorithmus.r.nextBoolean())
			return team1;
		else
			return team2;
	}

	@Override
	public String toString() {
		if (team1.equals(team2)) {
			return team1.toString();
		} else {
			return team1 + " Vs " + team2;
		}
	}
}

class Round {
	int number;
	List<Team> teams;
	List<Vs> vss = new LinkedList<Vs>();

	public Round(List<Team> teams) {
		super();
		this.number = 0;
		this.teams = teams;
		int max = (teams.size() % 2 == 0 ? (int) teams.size() / 2 : (int) Math
				.floor(teams.size() / 2) + 1);
		max--;
		for (int i = 0; i <= max; i++) {
			vss.add(new Vs(teams.get(i), teams.get(teams.size() - 1 - i)));
		}
	}

	public Round(int number, List<Team> teams) {
		super();
		this.number = number;
		this.teams = teams;
		int max = (teams.size() % 2 == 0 ? (int) teams.size() / 2 : (int) Math
				.floor(teams.size() / 2) + 1);
		max--;
		for (int i = 0; i <= max; i++) {
			vss.add(new Vs(teams.get(i), teams.get(teams.size() - 1 - i)));
		}
	}

	public boolean isFinalRound() {
		if (vss.size() == 1)
			return true;
		else
			return false;
	}

	public Round getNextRound() {
		List<Team> winners = new LinkedList<Team>();

		for (int i = 0; i < vss.size(); i++) {
			winners.add(vss.get(i).getWinner());
		}
		number++;
		return new Round(number, winners);
	}

	@Override
	public String toString() {
		return "\n\tRound #" + number + "\n" + vss.toString();
	}
}
 
Zuletzt bearbeitet:

mavinatic

Bekanntes Mitglied
Ne warum sollte ein Baum dabei rauskommen?

1.Spieltag
Team A - Team B
Team C - Team D
Team E - Team F

und am ende der spieltage sollen alle ALLE TEAMS gegen ALLE TEAMS gespielt haben.
 

mavinatic

Bekanntes Mitglied
natürlich hatte ich die lösung auch schon :D aber!! es geht ja darum das alle an spieltagen spielen wie in der bundesliga da spielen die ja auch nicht alle spiele Team1 und dann Team2 etc...:D
 

eRaaaa

Top Contributor
Java:
	public static void main(String[] args) throws Exception {
		String[] teams = new String[18];
		for (int i = 0; i < teams.length; i++) {
			teams[i] = "Team " + (i+1);
		}
		int n = teams.length - 1;
		System.out.println("----HINRUNDE----");
		for (int i = 1; i < (n + 1); i++) {
			System.out.println("---" + i + ".Spieltag---");
			if (i % 2 == 0) {
				printMatch(teams[i - 1], teams[n]);
			} else {
				printMatch(teams[n], teams[i - 1]);
			}
			for (int k = 1; k < (n + 1) / 2; k++) {
				int tmp = (i + k) % n;
				int teamA = tmp == 0 ? n : tmp;
				tmp = ((i - k % n) + n) % n;
				int teamB = tmp == 0 ? n : tmp;
				if (k % 2 != 0) {
					printMatch(teams[teamA - 1], teams[teamB - 1]);
				} else {
					printMatch(teams[teamB - 1], teams[teamA - 1]);
				}
			}
		}
	}

	private static void printMatch(String teamA, String teamB) {
		System.out.println(teamA + " : " + teamB);
	}

das noch schön in Klassen verpacken und die Rückrunde ist auch kein Problem mehr ;)
 
Zuletzt bearbeitet:

Rudi77

Mitglied
Hallo zusammen,

ich brauche eure Hilfe!

Es tut mir leid, dass ich diesen uralten Thread wieder herauskrame, allerdings komme ich alleine nicht weiter.

Es geht um den Code den eRaaaa zuvor gepostet hat.

In dem Code werden alle Spielpaarungen aufgeführt, die genannte Anzahl an Teams eintreten können.
Soweit funktioniert der Code auch gut. Jedoch ist die Menge der Spielpaarungen bei einer ungeraden Anzahl an Teams nicht korrekt.
Wenn bspw. 5,7,9 etc. Teams gewählt werden, ergeben sich nicht alle Spielpaarungen.

Ich komme an dieser Stelle leider nicht weiter. Ich kann den entsprechenden "Fehler" im Code nicht finden.

Es wäre nett, wenn sich das mal jemand ansehen könnte.

Danke!

Rudi77
 

stg

Top Contributor
Dann füge einfach ein weiteres Team als Dummy hinzu und streiche anschließend alle Spielpaarungen, in denen der Dummy vorkommt.
 

Rudi77

Mitglied
Danke! Das ist schon mal ein guter Ansatz! Hätte ich auch selber drauf kommen sollen... :oops:

Hat denn noch jemand eine Idee ohne die Dummy-Variante?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D zufälliger Spielplan Java Basics - Anfänger-Themen 3
laxla123 Eigenschaften eines Algorithmus (determiniert vs.. deterministisch) Java Basics - Anfänger-Themen 2
C Gewinnspiel erstellen mit Algorithmus Java Basics - Anfänger-Themen 3
C negamax-Algorithmus für Tic-Tac-Toe spielt manchmal falsch Java Basics - Anfänger-Themen 10
H Minimax Algorithmus in Tic Tac Toe Java Basics - Anfänger-Themen 3
M Minimax-Algorithmus für Vier gewinnt Java Basics - Anfänger-Themen 11
ohneInformatik; Trockentest Algorithmus, mathematischen Zusammenhang angeben Java Basics - Anfänger-Themen 3
M Minimax-Algorithmus Java Basics - Anfänger-Themen 17
mervanpolat Binary Search Algorithmus ausführen Java Basics - Anfänger-Themen 1
J Rekursiver Algorithmus Java Basics - Anfänger-Themen 9
M monte carlo Algorithmus für 4 gewinnt Java Basics - Anfänger-Themen 12
izoards Sortier Algorithmus für Bounding Box Elememte Links nach Rechts und von Oben nach Unten Java Basics - Anfänger-Themen 33
S Algorithmus entwicklen, der zu einem gegebenen Datum die Jahreszeit ermittelt Java Basics - Anfänger-Themen 13
rosima26 Merge-Algorithmus Java Basics - Anfänger-Themen 53
C Ein Algorithmus soll schneller werden Java Basics - Anfänger-Themen 24
D Dijkstra Algorithmus Hilfe!! Java Basics - Anfänger-Themen 9
U Den Kuchen aufteilen - aber wie? (Rebalancing-Algorithmus) Java Basics - Anfänger-Themen 14
s_1895 Pseudocode Naiver Algorithmus Java Basics - Anfänger-Themen 17
H String verschlüsseln - eigener Algorithmus Java Basics - Anfänger-Themen 104
T Algorithmus für Index mit min-Wert Java Basics - Anfänger-Themen 2
Düsseldorf2002 Testen meines Algorithmus Java Basics - Anfänger-Themen 1
D Primzahlen Rechner nach Eratostenes von Kyrene Algorithmus Java Basics - Anfänger-Themen 2
KogoroMori21 Frage zum Euklidischen Algorithmus Java Basics - Anfänger-Themen 11
S Algorithmus java searchAll IKey Java Basics - Anfänger-Themen 4
S Algorithmus Datensätze einfügen wenn... Java Basics - Anfänger-Themen 26
KogoroMori21 MergeSort Algorithmus Java Basics - Anfänger-Themen 2
KogoroMori21 Textdatei einlesen im Array (Selection Sort Algorithmus) Java Basics - Anfänger-Themen 3
fendix Compiler-Fehler Algorithmus zur Bestimmung von Primzahlen Java Basics - Anfänger-Themen 7
S Algorithmus (reelle Zahl <65536 von dezimal zu dual) max. 10 Nachkommastellen Java Basics - Anfänger-Themen 4
G Algorithmus Graphen Java Basics - Anfänger-Themen 10
D Input/Output fehlerhafter Algorithmus zum Ersetzen von Array-Werten nach logischem Schema Java Basics - Anfänger-Themen 1
N Selection Algorithmus: Methode wird nicht erkannt (BlueJ) Java Basics - Anfänger-Themen 3
U Meinung zum Dijkstra Algorithmus Java Basics - Anfänger-Themen 6
U Dijkstra Algorithmus Laufzeit Java Basics - Anfänger-Themen 3
L Math.exp also eigenen Algorithmus Java Basics - Anfänger-Themen 2
Kirby.exe Algorithmus entwickeln Java Basics - Anfänger-Themen 37
M Algorithmus Max-Heap? Java Basics - Anfänger-Themen 3
I Labyrinth auf der Basis eines rekursiven Algorithmus Java Basics - Anfänger-Themen 27
CptK Best Practice Algorithmus nach jedem Schritt zum Visualisieren pausieren Java Basics - Anfänger-Themen 3
A Algorithmus effizienter machen Java Basics - Anfänger-Themen 1
V Algorithmus zur fortlaufenden Berechnung des duechscjnt Java Basics - Anfänger-Themen 1
M Dijkstra Algorithmus in Graphen auf mehrere verschiedene Knoten anwenden lassen Java Basics - Anfänger-Themen 11
O Labyrinth Algorithmus Java Basics - Anfänger-Themen 3
G Quicksort Algorithmus Java Basics - Anfänger-Themen 12
S Binäre-Suche Algorithmus Java Basics - Anfänger-Themen 1
D Algorithmus in Pseudocode mit log2(n) Operationen erstellen Java Basics - Anfänger-Themen 3
C Laufzeit eines Sortier-Algorithmus ermitteln Java Basics - Anfänger-Themen 4
H aufgabe java luhn algorithmus Java Basics - Anfänger-Themen 10
A Datenstruktur für Savings Algorithmus und Planung von kleinen Programmierprojekten Java Basics - Anfänger-Themen 1
J Algorithmus für eine Reihe implementieren Java Basics - Anfänger-Themen 2
S Dijkstra Algorithmus funktioniert nicht Java Basics - Anfänger-Themen 4
N Denksportaufgabe durch Algorithmus lösen Java Basics - Anfänger-Themen 2
S Problem mit einem rekursivem FloodFill Algorithmus Java Basics - Anfänger-Themen 62
B Algorithmus Square und Multiply Java Basics - Anfänger-Themen 3
J Algorithmus - Strings auf eigene Reihenfolge miteinander vergleichen Java Basics - Anfänger-Themen 4
D Frage Boyer-Moore Algorithmus Java Basics - Anfänger-Themen 7
M Komplexität Algorithmus Java Basics - Anfänger-Themen 8
H Zeichen im algorithmus Java Basics - Anfänger-Themen 4
B Code Verständnisfragen - FLoyd Warshall Algorithmus Java Basics - Anfänger-Themen 1
B Algorithmus zum entmischen einer Zahlenfolge Java Basics - Anfänger-Themen 15
X Minimax-Algorithmus über alle Kanten möglich? - Kanten darstellen Java Basics - Anfänger-Themen 1
T Algorithmus zur Überprüfung eines binären Suchbaums Java Basics - Anfänger-Themen 2
K Best Practice Algorithmus für Berechnung von Zahlenreihenfolge Java Basics - Anfänger-Themen 12
M Simpler Algorithmus läuft extrem langsam. Java Basics - Anfänger-Themen 3
K Erste Schritte Brute Force Algorithmus Java Basics - Anfänger-Themen 2
L Frage zu BubbleSort Algorithmus Java Basics - Anfänger-Themen 2
B gibt es ein Stundenplan-Algorithmus? Java Basics - Anfänger-Themen 11
O Algorithmus-Problem Java Basics - Anfänger-Themen 5
P Euklidischer Algorithmus Java Basics - Anfänger-Themen 9
L Greates Commong Dividend - euklidischer Algorithmus, modulos not positive Java Basics - Anfänger-Themen 5
J Euklidischer Algorithmus Java Basics - Anfänger-Themen 1
S Quicksort Algorithmus Java Basics - Anfänger-Themen 2
S GraphNode --- Dijkstra Algorithmus : NullPointerException Java Basics - Anfänger-Themen 1
B Rekursive Algorithmus schreiben Java Basics - Anfänger-Themen 8
V Algorithmus in einer Methode ausführen Java Basics - Anfänger-Themen 3
M Implementierung des Knuth-Morris-Pratt-Algorithmus Java Basics - Anfänger-Themen 0
M Dijkstras Algorithmus Java Basics - Anfänger-Themen 5
S Zusammenhang Datenstruktur/Algorithmus Java Basics - Anfänger-Themen 1
M Simulation - Algorithmus Java Basics - Anfänger-Themen 3
F Erste Schritte Hilfe beim Algorithmus finden Java Basics - Anfänger-Themen 8
D Algorithmus für Punkte auf einem Kreis Java Basics - Anfänger-Themen 0
D Algorithmus zu gegebener Laufzeit implementieren Java Basics - Anfänger-Themen 1
B Doppelte Werte aus Array entfernen ohne Import - Algorithmus Java Basics - Anfänger-Themen 5
C Ideen für einen Algorithmus Java Basics - Anfänger-Themen 1
F Best Practice Algorithmus optimieren - Binaeruhr Java Basics - Anfänger-Themen 2
S Euklid Algorithmus zur Berechnung des GGTs Java Basics - Anfänger-Themen 2
L Welcher Algorithmus ist das ? Java Basics - Anfänger-Themen 9
J Rekursiver Horner-Schema-Algorithmus - Verstehe ich ihn richtig? Java Basics - Anfänger-Themen 2
O Java Zufalls-Verteil-Algorithmus Java Basics - Anfänger-Themen 3
P ganz simpler algorithmus Java Basics - Anfänger-Themen 3
C Sortieren ohne Algorithmus Java Basics - Anfänger-Themen 8
J Algorithmus: Grad von floating zu Grad/Minute/Sekunde Java Basics - Anfänger-Themen 3
A Text Verschriebung/Algorithmus(?) Java Basics - Anfänger-Themen 8
R Rekursionsformel für Laufzeit von Algorithmus Java Basics - Anfänger-Themen 3
E Algorithmus für kart. Produkt: als int [] Feld repräsentiert Java Basics - Anfänger-Themen 10
U Peterson Algorithmus Java Basics - Anfänger-Themen 13
algebraiker Collections Bräuchte Hilfe bei dem Algorithmus - LinkedHashMap Java Basics - Anfänger-Themen 2
S A* Path Algorithmus in Java schon vorhanden Java Basics - Anfänger-Themen 3
S Bubble Sort Algorithmus Java Basics - Anfänger-Themen 3
N Unerklärlich: Rekursiver Algorithmus gibt falschen Datentyp zurück... Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben