Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Shivans

Desafio algoritmo em java!

Recommended Posts

como eu vo faze isso galera...

alguem pode me ajudar???

 

Projeto e Desenvolvimento de Sistemas Corporativos

Disciplina: Introdução em Desenvolvimento de Sistemas

Professor: Welington Nunes Siemiatkowski

 

 

Desafio 1 - Java

 

 

Faça um programa em Java para solucionar o seguinte problema: A partir de algumas letras digitadas pelo usuário, verificar no banco de dados do sistema quais as possíveis palavras que podem ser formadas.

 

Para isso, crie um vetor com 6 posições e guarde nele cada letra digitada pelo usuário. Após isso, verifique no banco de dado abaixo, qual das seguintes palavras podem ser formadas.

Para o banco de dados, crie vetores com as seguintes palavras:

SABADO, LETIVO, MELHOR, BANCOS, PARTIR, MAXIMO, MINIMO, LETRAS, LISTAR, ICONES, PASTAS, PASTEL, EDITAL, AVISOS, ALUNOS, EDITAR, EXIBIR, LIMPAR, JANELA, SALVAR

 

Quando encontrar a(s) palavra(s) que corresponde(m) as letras digitadas, informe ao usuário. Caso não encontre nenhuma, mostre a mensagem “Não existe uma palavra correspondente no banco de dados”.

 

Esse desafio deve ser apresentado no dia 25/05/2007.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tipo, o cara digita 6 letras em qualquer ordem, e você tem que ver as 6 letras formam uma ou mais palavras que estão no banco de dados é isso?Se for, eu não sei a implementação do algortimo, mas acho que você consegue resolver esse problema usando anagramas. Não lembro exatamente se o caso é de combinação ou permutação, mas com um algoritmo de anagramas você resolve esse problema. Você mexe no vetor e ve se formou uma palavra, se não formou você mexe de novo e ve se formou uma palavra do banco de dados. Faça isso até ter tentando todas as combinações possíveis das letras.Não sei se a lógica é a mais eficiente, mas ela resolve o caso. Agora o algoritmo em si eu vo ficar devendo...Flws!

Compartilhar este post


Link para o post
Compartilhar em outros sites

po valew cara ja kebro um galhao... mais ainda sim continuo esperando mais sugestoes!!!abraco!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bem, se você escolher seguir o caminho dos anagramas, http://www.unicamp.br/~hans/mc102/java/alg...permutacao.html tem uma classe java que faz permutação. Não testei ela, mas provavelmente ela funciona, de qualquer maneira ela deve dar uma ajuda para conseguir gerar os anagramas...

 

O unico problema é que ela tem poucos comentários e não tem uma explicação de como funciona. Mas com alguns testes ou um debug você deve descobrir como ela funciona.

 

Flws

Compartilhar este post


Link para o post
Compartilhar em outros sites

pois e... ta dificil cara!!! nao to conseguindo mesmo!!! mais logo logo eu mostro o q eu to com dificuldade!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

snifpasso o dia de entregar e eu nao consegui fazer... hahapois e tenho outro problema... e nao to conseguindo resolver... tem agora um joguinho da velha opra fazer... tipo modo texto mesmo... nao to conseguindo pensar em como fazer... alguem ajuda??? so no inicio o raciocinio???abraco!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Gostei do problema.Eu vejo várias opções, que influenciam a escalabilidade do negócio.O segredo é tratar a base de dados:Ordene os dados pela quantidade de caracteres.Isso já elimina eu diria uma média de 1/4 da base....Para agilizar a busca, duplique a base de dados. Dobra o tamanho e disco? Sim, mas ganha muito em desempenho.Mas não duplique simplesmente, ordene os caracteres dentro.Ordene os caracteres digitados pelo usuário.Aí é só buscar ^^Vou fazer isso e coloar o código aqui, ok? Em vários minutos ou poucas horas eu ponho aqui.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mudei de idéia, e tirei a primeira parte que falei, não separei pelo número de caracteres.

Deu preguiça.

Mas aí está:

package forum.imaster;public class BuscaPalavraPorLetra{	static String dados[]={"SABADO","LETIVO","MELHOR","BANCOS","PARTIR",						   "MAXIMO","MINIMO","LETRAS","LISTAR","ICONES",						   "PASTAS","PASTEL","EDITAL","AVISOS","ALUNOS",						   "EDITAR","EXIBIR","LIMPAR","JANELA","SALVAR"};	static String dadosTratados[];	public static void main(String args[]){		String letras,letrasOrdenadas,palavrasObtidas[];		tratarDados(); 		letras=Entrada.lerString("digite as letras:").toUpperCase();		letrasOrdenadas=ordenarCaracteres(letras);		System.out.println("As seguintes palavras servem:");		procurar(letrasOrdenadas);	}		//Aqui tratamos a base de dados	private static void tratarDados(){		dadosTratados=new String[dados.length];		for(int i=0;i<dados.length;i++)			dadosTratados[i]=ordenarCaracteres(dados[i]);	}	/*Aqui seria ideal um metodo de ordenação com melhor desempenho, mas	 *para fins didaticos vou deixar um bubbleSort:*/	private static String ordenarCaracteres(String palavra){		byte b[]=palavra.getBytes();		for (int i=b.length;--i>=0;)			for (int j = 0; j<i; j++) {				if (b[j] > b[j+1]) {					byte T = b[j];					b[j] = b[j+1];					b[j+1] = T;				}			}		return new String(b);	}		/*Repito, devia usar uma busca mais decente. Mas vou procurar 	 * sequencialmente, porque queremos apenas demonstrar*/	private static void procurar(String palavra){		for(int i=0;i<dadosTratados.length;i++)			if(palavra.equals(dadosTratados[i]))				System.out.println(dados[i]);	}}

Compartilhar este post


Link para o post
Compartilhar em outros sites

snifpasso o dia de entregar e eu nao consegui fazer... hahapois e tenho outro problema... e nao to conseguindo resolver... tem agora um joguinho da velha opra fazer... tipo modo texto mesmo... nao to conseguindo pensar em como fazer... alguem ajuda??? so no inicio o raciocinio???abraco!!!

Bom, quanto a esse problema...Se é em modo texto, exiba assim:7 8 94 5 61 2 3para o usuário escolher em qual posição jogar.Quando atualizar com as posições já ocupadas:X O 94 X Ox O 3Ou separe se achar isso muito confuso...- - 94 - -- - 3X O -- X OX O -Bom, númere as posições, de maneira a trabalhar com um vetor.Pode ser de int, sendo 0=vazio,1=xis,2=bolaNessa disposição:0 1 23 4 56 7 8Então, no meu exemplo fica:int posicoes[]={1,2,0,0,1,2,1,2,0};Para conferir se alguém venceu, um jeito simples é montar um array com 'estados de vitória'.Como são sempre trios, vou montar apenas um vetor, cada 3 é uma vitória possível.Vou separar em linhas para facilitar:vitorias[]={0,1,23,4,56,7,80,3,61,4,72,5,80,4,82,4,6}Isso é só o primeiro problema, modelar o jogo.Ideal se for para jogar de 2 players.Mas como nem tudo na vida é maravilhas, o seu jogo precisa ter o "vs PC?"Então precisamos ensinar o PC a escolher uma jogada.Vamos dividir em 3 decisões, as 2 primeiras são faceis.Primeiro:Use o vetor de vitorias. Verifique se de algum trio temos 2, e 1 vazio. Se sim, jogue nesse vazio, que venceremos. Se não há esse estado, vá para o Segundo.Segundo:Verifique a mesma coisa, só que com os do oponentes. SE ele já têm 2 e há um vazio, jogue no vazio. Essa é a defesa básica. Se não houve, vá para o terceiro.Terceiro:Aqui complica. Aqui entra a estratégia de fato. Mas sem pensar em uma estratégia perfeita....Uma solução é colocar em ordem as posições desejadas.Exemplo: o ponto do meio é o meu favorito, depois os cantos e por ultimo as arestas.Então, vá procurando nesse vetor, e jogue no primeiro vazio:int preferenciais[]={4,1,7,3,5,0,2,6,8};Bom, espero ter ajudado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

olha eu comecei mais nao to conseguindo sair dessa etapa!!! e o problema e que to usando o edit plus pra faze e so compilo na facul... que que eu preciso ter pra compilar aki em casa? desculpe mais to aprendendo ainda galera!!!

 

/** * @(#)JogodaVelha.java * * JogodaVelha application * * @author  * @version 1.00 2007/5/25 */ import java.io.*;public class JogodaVelha {		//-------- Inicio	public static void main(String[] args) {				char tabuleiro[][];		tabuleiro = new char [3][3];		 		IniciaJogo(tabuleiro); 		ImprimeTabuleiro(tabuleiro); 		Jogada(tabuleiro);	}		//--------- Inicio do Jogo	public static void IniciaJogo(char [][]m) {				int x, y;				for(y=0; y<3;y++){			for(x=0; x<3;x++){				m[y][x] = ' ';			}					} 	 	}	//--------- Layout (Imprime o Tabuleiro)	public static void ImprimeTabuleiro(char [][]m){				System.out.println("				"); //----------- Layout		System.out.println("				"); //----------- Layout		System.out.println("		 "+m[0][0]+" | "+m[0][1]+" | "+m[0][2]);		System.out.println("		---|---|---");		System.out.println("		 "+m[1][0]+" | "+m[1][1]+" | "+m[1][2]);		System.out.println("		---|---|---");		System.out.println("		 "+m[2][0]+" | "+m[2][1]+" | "+m[2][2]);   		}	public static void Jogada(char [][]m){		BufferedReader teclado;		String linha;		   	try {   		System.out.println("Digite a Posição de X:");   				 teclado = new BufferedReader(new InputStreamReader(System.in));		 linha = teclado.readLine();		 System.out.println("Digite a Posição de Y:");		 			}		catch (IOException x) {			System.out.println("Erro:"+x);		}									}					}

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.