Auxílio em algorítmo - [ HELP ]

11 respostas
J

Boa tarde,

Pessoal, o seguinte, preciso fazer um trabalho de aula e eestou quebrando a cabeça pra bolar uma solução e  difícil, ainda nem consegui programar nada, o que preciso fazer é:

 Um programa que recebe um alfabeto com X simbolos(podem ser letras ou números, não preciso dizer qts, posso digitar por exemplo abcd e o programa vai saber que meu alfabeto tem 4 simbolos) e recebe também a informação de que deve escrever palavras com Y simbolos (digito por exemplo 3 e ele tem que me retornar qts palavras diferente ele pode formar com este alfabeto) mas temos regras, ele não pode escrever um simbolo menor depois de um maior, ele  escreve simbolos maior ou igual ao úlltimo escrito, exemplo:

alfabeto: 1234
com 3 simbolos

saida: 111, 112, 113, 114, 122, 123, 124… Ele não pode escrever por exemplo 121, 132, 243, 341…

tem que dizer qts podem ser formadas e escrevê-las na tela…

Se alguem puder me dar uma idéia de como fazer, não o programa, mas o que pode ser usado por exemplo…

ps, meu prof. disse que temos q pensar pois a resolução pode ser em umas 6-7 linhas(fora declarações iniciais do programa…) claro que essa deve ser a resolução mais eficiente, quero primeiramente conseguir o objetivo. hehehe

grato

11 Respostas

Roger75

Bem, você poderia fazer um método numa classe que pega uma String e, para caracter dela, compara se os próximos da cadeia são maiores ou iguais. Caso não passe nessa condição, você retorna false no método.

J

Ok, poderia pegar o alfabeto(string) e por em ordem crescente e ir formando strings iniciando pelo primeiro caracter desta string ordenanda, por exemplo repetindo quantas vezes foi pedido na execução o primeiro caracter, depois tem que criar a segunda repetindo até a quant. pedida menos 1 e o ultimo caracter passa a ser o segundo da string ordenada, depois até tamanho -1 denovo e o ultimo será o terceiro, e ir assim até o fim da string. Depois ir até tamanho - 2 e nos doi ultimos colocar o segundo caracter da string ordenada e assim sucessivamente, mas não consigo pensar em algo eficiente pra fazer isso…

espero que entendam minha explicação um pouco “poluida”… :slight_smile:

grato

J

jefers0n:
Boa tarde,

Pessoal, o seguinte, preciso fazer um trabalho de aula e eestou quebrando a cabeça pra bolar uma solução e  difícil, ainda nem consegui programar nada, o que preciso fazer é:

 Um programa que recebe um alfabeto com X simbolos(podem ser letras ou números, não preciso dizer qts, posso digitar por exemplo abcd e o programa vai saber que meu alfabeto tem 4 simbolos) e recebe também a informação de que deve escrever palavras com Y simbolos (digito por exemplo 3 e ele tem que me retornar qts palavras diferente ele pode formar com este alfabeto) mas temos regras, ele não pode escrever um simbolo menor depois de um maior, ele  escreve simbolos maior ou igual ao úlltimo escrito, exemplo:

alfabeto: 1234
com 3 simbolos

saida: 111, 112, 113, 114, 122, 123, 124… Ele não pode escrever por exemplo 121, 132, 243, 341…

tem que dizer qts podem ser formadas e escrevê-las na tela…

PS. Descobri uma coisaque acho q facilitará um pouco, o simbolo menor sempre o primeiro digitado e o maior o ultimo, ex: digitado 3214, o menor é o 3 e o maior é o 4, daí ñ precisa copara-los, apenas pegar na ordem…

Será que fica mais facil???

J

Alguem pode me auxiliar? Dei uma lida e vi que é parecido com Arranjo simples, mas aqui posso ter elementos repetidos, e depois de um simbolo só pode vir outro maior ou igual, 123 combinados 2 a 2, pode ser 111, 112, 113, 122… e não 132, 121…

Lembrando que o maior elemento é o ultimo digitado e o menor o primeiro, Não precisa testar quem é maior ou menor, o que manda é a entrada no inicio do programa…

pmlm

Tens de saber quantos são antes de escrever? Ou podes ir escrevendo e contando?

J

Acredito que o melhor é calcular e depois se pedir pra escrever escreve-las… pois o calculo de qts são, segundo o professor, é mais rapido e mais facil de se fazer…

Grato,

J

Acredito que descobri a contagem como fazer, mas falta como escrever isso, por exemplo, alfabeto: ABCD, formar palavras com 3 simbolos:

AAA - AAB - AAC - AAD
ABB - ABC - ABD
ACC - ACD
ADD

*** Todas que começam com o primeiro símbolo(no caso A), dá o somatório da quantidade de simbolos do alfabeto(nesse caso 4), somatório de 1 a 4 [1 + 2 + 3 +4 = 10]

BBB - BBC - BBD
BCC - BCD
BDD

Já o segundo simbolo dá o somatório do total do alfabeto menos 1(4 - 1 = 3), no caso aqui tres [1 + 2 + 3 = 6] 6 é a quantidade de palavrazs escritas com B(segundo simbolo) no inicio

CCC - CCD
CDD

Aqui somatorio do total de simbolos do alfabeto menos 2(nesse caso é 2)

DDD
Aqui somatorio do total de simbolos do alfabeto menos 1(nesse caso é 1)

Resumindo, para este alfabeto (ABCD), escrevendo palavras com 3 simbolos seguindo aquelas regras do inicio, seria escrito o somatório do total de simbolos do alfabeto, mais o somatório do total menos um, mais o somatorio do total menos 2… até o uiltimo simbolo que so escreverá uma palavras(ele repetidas vezes ), pois como vimos não pode escrever simbolos menores depois de escrito um simbolo maior…

Espero que auxilie alguem a me dar uma idéia de como fazer a outra parte, pois to “apanhando”… :frowning:

grato,

J

Boa tarde,

Será que essa dúvida se encaixaria melhor nos tópicos de Java Avançado???
Ou não é tão difícil assim?

grato,

J

jefers0n:

Acredito que descobri a contagem como fazer, mas falta como escrever isso, por exemplo, alfabeto: ABCD, formar palavras com 3 simbolos:

AAA - AAB - AAC - AAD
ABB - ABC - ABD
ACC - ACD
ADD

*** Todas que começam com o primeiro símbolo(no caso A), dá o somatório da quantidade de simbolos do alfabeto(nesse caso 4), somatório de 1 a 4 [1 + 2 + 3 +4 = 10]

BBB - BBC - BBD
BCC - BCD
BDD

Já o segundo simbolo dá o somatório do total do alfabeto menos 1(4 - 1 = 3), no caso aqui tres [1 + 2 + 3 = 6] 6 é a quantidade de palavrazs escritas com B(segundo simbolo) no inicio

CCC - CCD
CDD

Aqui somatorio do total de simbolos do alfabeto menos 2(nesse caso é 2)

DDD
Aqui somatorio do total de simbolos do alfabeto menos 1(nesse caso é 1)

Resumindo, para este alfabeto (ABCD), escrevendo palavras com 3 simbolos seguindo aquelas regras do inicio, seria escrito o somatório do total de simbolos do alfabeto, mais o somatório do total menos um, mais o somatorio do total menos 2… até o uiltimo simbolo que so escreverá uma palavras(ele repetidas vezes ), pois como vimos não pode escrever simbolos menores depois de escrito um simbolo maior…

Espero que auxilie alguem a me dar uma idéia de como fazer a outra parte, pois to “apanhando”… :frowning:

grato,

Na verdade essa contagem não da certo… Só da pra quando as palavras tem 3 simbolos, se mudar o numero de símbolos que as palavras tem que ter da errado…

Continuo perdido. Será que alguém que saiba como resolver teria um tempinho pra me dar alguma dica, mostrar algum caminho pelo menos…

grato

Lucas_Abbatepaolo

não sei oq vc pode usar para criar seu sisteminha…

mais vc pode pegar a string e transformar ela em um array…pois assim vc tem metodos staticos na classe Arrays que fazer essa ordenação automatica…assim vc pode depois so c preocupar com montar as palavras…

J

Lucas Abbatepaolo:
não sei oq vc pode usar para criar seu sisteminha…

mais vc pode pegar a string e transformar ela em um array…pois assim vc tem metodos staticos na classe Arrays que fazer essa ordenação automatica…assim vc pode depois so c preocupar com montar as palavras…

Pois é, o montar as palavras que é dificil, pois podem ser com n numero de simbolos, depende do que eu pedir na execução, e o alfabeto pode variar também…

Olhe o que tem pronto, mas não funciona pra todos os casos, funciona bem para palavras com 3 simbolos(independente do tamanho do alfabeto), se mudar ele passa a dar resultado errado…

static void show(String alfa, int lenSim, int X)
    {
        if(alfa.length() > 0)
            word[X] = alfa.charAt(0);

        if(X == (lenSim-1)) {
            for(int c=0; c < alfa.length(); c++) {
                if(alfa.length() > 0)
                    word[X] = alfa.charAt(c);
                for(int i=0; i < lenSim; i++)
                    System.out.print(word[i]);
                System.out.print(" ");
            }
            if(alfa.length() > 0) {
                alfa = alfa.substring(1);     //acredito que por aqui tem algum erro, pelo menos para palavras com mais de 3 simbolos notei que aqui que começa a montar errado as palavras..
                show(alfa, lenSim, 1);
            }
            return;
        }
        else
            show(alfa, lenSim, X+1);
    }

    //**************************************************************
    static void ShowWords(String alfa, int lenSim)
    {
        do {
            show(alfa, lenSim, 0);
            System.out.println();
            alfa = alfa.substring(1);
        }while(alfa.length() > 0);
    }

Depois na main eu recebo do usuário o alfa(alfabeto) e o lenSim (quantidade de simbolos da palavra)…

Na verdade o algorítmo não ta dando erro, ele executa sempre, mas não apresenta resultado certo para palavras com numero de simbolos diferente de 3. Ahhh ele da erro sim, quando mando escrever palavras com 1 simbolo…, que teria que ser o proprio alfabeto(Ex. alfa: A B C D, screver palavras com 1 simbolo, seria A, B, C, D)

Grato,

Criado 17 de março de 2011
Ultima resposta 2 de abr. de 2011
Respostas 11
Participantes 4