Seguinte galera tava estudando agora e me surgiu um problema, de facil resolucao, e que me chamou a atencao eis ai ele:
Considere todas as trinta e duas seqüências, com cinco elementos cada uma, que podem ser formadas com os algarismos 0 e 1. Quantas dessas seqüências possuem pelo menos três zeros em posições consecultivas?
É claro que são 32 sequencias, pois o numero de caracteres disponiveis sao 2 e o numero de elementos sao 5, logo 2 ^ 5 = 32
E o numero de sequancias que tem o (…0,0,0…) sao 8:
00000
00001
00011
10000
11000
10001
01000
00010
A resposta ja achamos, agora eu queria obter uma matriz [x][y] com todos os elementos da lista, eu fiz um codigo que ficou +ou- assim: (nada real, apenas uma representação)
na minha opinião essa é uma forma genérica bastante simples, não vejo motivos para não usa-lá, vc poderia iniciar direto com as valores, tipo
int[][] array= {
{0,0,0,0,0},
{0,0,0,0,1},
...
};
mas ai se vc for fazer alguma alteração vai ter q fazer na raça, por exemplo, se quiser sequencias com 6 dígitos vai fazer tudo d novo.
Do seu modo basta adicionar + 1 laço.
Me explica melhor, eu até entendi algumas partes, mas ainda nao estudei o suficiente pra chegar nessa solução.
Porque quando voce declara a matriz de ‘chars’ vc converte em int o resultado de Math.pow(2, tam) ? Ele retorna um double por acaso?
O metodo Magica foi o que mais me gerou duvidas, não conheço muito bem a classe StringBuffer e o método insert. Mas pelo visto ele acrescenta algo na String prq senão seu loop for ficaria infinito, correto? Agora como ele funciona?
Por acaso para eu saber o tamanho de uma String eu não uso uma propriedade né? e sim um MÉTODO! Isso me confundiu, prq na maioria das linguagens eu uso PROPRIEDADES para saber o tamanho total da string. O charAt eu jah conhecia.
Agora porque usar o Integer.toBinaryString com a var ‘a’ do tipo int em que você acresenta a toda vez que o loop do contador ‘i’ roda? Que lógica tem por trás desses número binários?
Então não seria mais fácil fazer assim se fosse uma squencia:
Oba! Pensei q não ia responder…
Caso não entenda minha explicação é só postar.
[quote]Porque quando voce declara a matriz de ‘chars’ vc converte em int o resultado de Math.pow(2, tam) ? Ele retorna um double por acaso?
[/quote]
Retorna um double mesmo.
o método insert é usado para acrescentar valores na string na posição q vc indicar:
aux.insert(0,“0”); //acrescenta no início da string: posição 0, valor a ser inserido “0”
Explicando melhor agora:
for(;aux.length()<tam;)
aux.insert(0,"0");
A cada loop ele insere o “0” no início da string, fazendo com q a string aumente até ficar do tamanho desejado(tam)
O método length() retorna o tamanho da string, já em um vetor seria vetor.length, pois é um atributo.
Não é mágica, é tecnologia.
Você pediu pra gerar números binários em ordem crescente e grava em uma matriz, não?
[list]1.Gero um número inteiro: a
2.converto o número em uma string de binários: aux
3.coloco zeros a esquerda (pra ficarem completos).
4.gravo no iny
5.incremento o valor do número e vou pro passo 2[/list]
[quote]
Então não seria mais fácil fazer assim se fosse uma squencia:[/quote]
:idea: Vou tentar fazer algo parecido, acho q pode dar certo transformando essa string em um vetor de char e colocar no iny, daqui a pouco te respondo.
Quando Betinhum me mostrou esse programa que ele fez, lembrei de um que eu fiz no meu primeiro semestre na faculdade em qbasic. Implementamos em Java e resolvi postar.
Ahhh… roda mais rápido do que o dele.
Falow galera! 8)
public class Logica{
int tam;
int[][] tabela;
public Logica(int tam){
this.tam = tam;
tabela = new int[(int)Math.pow(2,tam)][tam];
magica2();
}
public void magica2(){
int numLinhas =(int)Math.pow(2,tam);//número de linhas da matriz
int j=0,//usado para indicar o índice da coluna
i,//índice da linha
linha,//usado para contar o número de dígitos que foram inseridos em cada coluna
variacao;//usado para calcular a variacao de cada coluna
for(int a=tam;a>0;a--){
i=0;
for(linha=0;linha<numLinhas;){
for(variacao = (int)Math.pow(2,a)/2;variacao > 0;variacao--){
tabela[i][j]=0;
linha++;
i++;
}
for(variacao = (int)Math.pow(2,a)/2;variacao > 0;variacao--){
tabela[i][j]=1;
linha++;
i++;
}
}
j++;
}
}
public void impressao(){
for(int j=0; j<Math.pow(2,tam);j++){
for(int i=0; i<tam; i++)
System.out.print(tabela[j][i]);
System.out.println();
}
}
public static void main(String args[]){
Logica bin = new Logica(5);
bin.impressao();
}
}
Perai Betinhum, sua solução tá ótima, até d+, acho tá “superdimencionada” para o problema do Guilherme. Posso estar errado, mas povavelmente ele não vai criar um sistema “realmente util” com essa solução, ele vai fazer o programinha para algum motivo pessoal ou escolar e depois esse codigo (e o tempo q vc levou pensando nele) sera perdido no limbo.
O código sim, mas o tempo não exatamente. Afinal, desenvolvendo um algoritmo ele está refletindo e aprendendo sobre uma área que é do interesse dele, que de uma forma ou de outra estará sendo útil para seu futuro, nem que seja apenas para aumentar a facilidade com que ele pensa em novas soluções.
Como disse o Richard Gabriel nesta entrevista [quote]“The idea behind the MFA in software is that if we want to get good at writing software, we have to practice it, we have to have a critical literature, and we have to have a critical context.”[/quote]
Estou agora mesmo terminando de escrever um algoritmo de busca em Grafos(não é nada fácil), essa semana terminei tabela Hash e árvore Binária(essas duas vc pode encontrar em java.util prontas) sendo que comecei fazendo por ser um trabalho da disciplina Estrutura de Dados, mas continuei aperfeiçoando depois do semestre ter terminado.
Fiz o código pra Guilherme por ter achado interessante e levei como um desafio, não perdi tanto tempo assim(e mesmo se tivesse perdido não acho nada d+, valeu a pena!). Guilherme até gostou(acho…), fez perguntas e ainda mostrou outra solução!
Essa discussão já saiu de seu foco (iny[][] Preciso obter bla…bla…), ou saiu do iny[][] e foi pro bla…bla…