:-o Olá pessoal!!!
Preciso fazer um código em Java para gerar uma tabela inteira de campeonatos por pontos corridos.
Ex: Campeonato Brasileiro
Como funciona:
- Levando em consideração 20 equipes no campeonato, o modelo de disputa é Ída e Volta, ou seja, Turno e Returno, o time1, vai enfrentar os outros 19 times (1° turno), e voltar a enfrentar os 19 times(2° turno).
Para fazer essa tabela, tenho que obedecer regras, tipo:
- O Time1 não pode jogar todos os 19 jogos do primeiro turno em casa, preciso que isso seja intercalado o máximo possível, ou seja enfrentar 1 jogo em casa, 2 fora, 2 em casa, 1 fora e assim sucessivamente, tentando intercalar o máximo;
- Os mesmos times não podem se enfrentar duas vezes em um mesmo turno;
- Um time não poderá jogar mais de 2 jogos consecutivos fora ou dentro de casa e jogar somente uma partida por rodada;
- Se o time1 jogou contra o time2, eles só vão poder jogar novamente (na mesma ordem de jogos) no 2° turno.
Ainda estou pesquisando sobre as regras de disputas de jogos do campeonato brasileiro, no entanto, não achei nenhum documento, CBF e FIFA, falando a respeito dessas regras.
Estou implementando, porém ainda não deu erro na geração utilizando as regras.
Se for possível alguém me dar uma dica!!! :idea:
Bom, eu não diria que esse algoritmo é dos mais simples, mas também não é dos mais complicados …
A 1a coisa que eu faria seria identificar as classes/entidades desse sistema. Você já fez isso ?
Na última rodada devem acontecer os clássicos regionais …
Se em 2011 por exemplo o Palmeiras enfrentou o Cruzeiro em casa no primeiro turno, neste ano inverte …
Na verdade no Brasileirão um time pode sim jogar dois jogos seguidos dentro ou fora de casa, três nunca!
[quote=rmendes08]Bom, eu não diria que esse algoritmo é dos mais simples, mas também não é dos mais complicados …
A 1a coisa que eu faria seria identificar as classes/entidades desse sistema. Você já fez isso ?[/quote]
Blz rmendes08!
Seguinte, ainda não pensei dessa maneira, com divisão de class, orientado a objetos e tal…
Fazendo um exemplo rápido mesmo, se eu conseguir, irei sim, identificar as classes direitinho
orientado a objeto… Em fim… estou trabalhando em um código, logo posto aqui… assim fica
mais fácil perceber o q quero…
Obrigado!!!
[quote=DiegoFroes][quote=rmendes08]Bom, eu não diria que esse algoritmo é dos mais simples, mas também não é dos mais complicados …
A 1a coisa que eu faria seria identificar as classes/entidades desse sistema. Você já fez isso ?[/quote]
Blz rmendes08!
Seguinte, ainda não pensei dessa maneira, com divisão de class, orientado a objetos e tal…
Fazendo um exemplo rápido mesmo, se eu conseguir, irei sim, identificar as classes direitinho
orientado a objeto… Em fim… estou trabalhando em um código, logo posto aqui… assim fica
mais fácil perceber o q quero…
Obrigado!!![/quote]
aí é que está … como eu disse, esse algoritmo não é tão simples assim que você vá resolver de uma vez … acho difícil fazer tudo em um método main e arrays globais. A idéia de modelar o domínio antes serve justamente para ajudar a fazer o programa em partes. Eu apostaria 1 coca-cola que você vai gastar algumas horas tentando resolver tudo de uma vez, vai se cansar até o ponto em que você desiste e resolve começar tudo de novo do jeito certo (já aconteceu isso com alguém ?)
Por favor, ao postar tópicos não ressalte o óbvio no título. Todos sabíamos que você tinha uma [Dúvida], caso contrário, nem sequer teria aberto o tópico.
Deixe o destaque para coisas importantes, como dizer que o tópico está [Resolvido].
[quote=ViniGodoy]Por favor, ao postar tópicos não ressalte o óbvio no título. Todos sabíamos que você tinha uma [Dúvida], caso contrário, nem sequer teria aberto o tópico.
Deixe o destaque para coisas importantes, como dizer que o tópico está [Resolvido]. [/quote]
Entendi, não irei cometer esse erro novamente. Obrigado pelo toque.
Fui editar o tópico, porém, já fizeram isso por mim.
Agraço.
Attt
Olá DiegoFroes!
Faz um tempo eu desenvolvi algo do tipo para controlar os joguinhos de final de semana, ficou até legal, porém não sei onde está.
Fiz um pequeno exemplo de como é, acho que é um início. Ai como os companheiros disseram, você aprimora para OO.
public static void main(String[] args) {
// TODO Auto-generated method stub
String clube[] = new String[20];
clube[0] = "Clube1";
clube[1] = "Clube2";
clube[2] = "Clube3";
clube[3] = "Clube4";
clube[4] = "Clube5";
clube[5] = "Clube6";
clube[6] = "Clube7";
clube[7] = "Clube8";
clube[8] = "Clube9";
clube[9] = "Clube10";
clube[10] = "Clube11";
clube[11] = "Clube12";
clube[12] = "Clube13";
clube[13] = "Clube14";
clube[14] = "Clube15";
clube[15] = "Clube16";
clube[16] = "Clube17";
clube[17] = "Clube18";
clube[18] = "Clube19";
clube[19] = "Clube20";
tabela(clube);
}
public static void tabela(String[] clube){
for (int i=0; i<20; i++){
for(int j=0; j<20; j++){
if (i!=j){
System.out.print(clube[i]);
System.out.print(" x ");
System.out.println(clube[j]);
}
}
}
}
}
At.
Wallfox
Estava lendo este livro esta semana e mais uma vez reparei como usar a ferramenta certa pode facilitar as coisas.
Este tipo de problema em Prolog parece ser trivial.
[quote=Wallfox]Olá DiegoFroes!
Faz um tempo eu desenvolvi algo do tipo para controlar os joguinhos de final de semana, ficou até legal, porém não sei onde está.
Fiz um pequeno exemplo de como é, acho que é um início. Ai como os companheiros disseram, você aprimora para OO.
public static void main(String[] args) {
// TODO Auto-generated method stub
String clube[] = new String[20];
clube[0] = "Clube1";
clube[1] = "Clube2";
clube[2] = "Clube3";
clube[3] = "Clube4";
clube[4] = "Clube5";
clube[5] = "Clube6";
clube[6] = "Clube7";
clube[7] = "Clube8";
clube[8] = "Clube9";
clube[9] = "Clube10";
clube[10] = "Clube11";
clube[11] = "Clube12";
clube[12] = "Clube13";
clube[13] = "Clube14";
clube[14] = "Clube15";
clube[15] = "Clube16";
clube[16] = "Clube17";
clube[17] = "Clube18";
clube[18] = "Clube19";
clube[19] = "Clube20";
tabela(clube);
}
public static void tabela(String[] clube){
for (int i=0; i<20; i++){
for(int j=0; j<20; j++){
if (i!=j){
System.out.print(clube[i]);
System.out.print(" x ");
System.out.println(clube[j]);
}
}
}
}
}
At.
Wallfox
[/quote]
Então galera, alguém conseguiria me ajudar em intercalar esses jogos dos times? Sou iniciante e estou com dificuldade 
Já me deparei com esse problema, ele não é tão simples de resolver quanto parece. Eis a resposta para o modo “todos contra todos”:
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Partidas {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
List<String> clubes = new ArrayList<String>();
System.out.println("Entre com o nome dos clubes. Deixe em branco para terminar.");
String clube = "";
do {
clube = in.nextLine().trim();
if (!clube.isEmpty()) {
clubes.add(clube);
}
} while (!clube.isEmpty());
if (clubes.size() % 2 == 1) {
clubes.add(0, "");
}
int t = clubes.size();
int m = clubes.size() / 2;
for (int i = 0; i < t - 1; i++) {
System.out.print((i + 1) + "a rodada: ");
for (int j = 0; j < m; j++) {
//Clube está de fora nessa rodada?
if (clubes.get(j).isEmpty())
continue;
//Teste para ajustar o mando de campo
if (j % 2 == 1 || i % 2 == 1 && j == 0)
System.out.print(clubes.get(t - j - 1) + " x " + clubes.get(j) + " ");
else
System.out.print(clubes.get(j) + " x " + clubes.get(t - j - 1) + " ");
}
System.out.println();
//Gira os clubes no sentido horário, mantendo o primeiro no lugar
clubes.add(1, clubes.remove(clubes.size()-1));
}
}
}
Esse algoritmo não considera “ida e volta”, como o enunciado original. Para fazer ida e volta, basta criar um segundo turno informando os times ao contrário.
Há algoritmos ainda melhores, para considerar posicão dos times e tentar colocar os jogos mais acirrados no final do campeonato. Mas aí já acho exagero para fins desse exercício, eheheehe.
2 curtidas