Ir para conteúdo

POWERED BY:

Arquivado

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

André Severino

Exercícios sobre Arrays

Recommended Posts

Boa noite pessoal, alguém tem alguns exercicios de arrays para eu treinar um pouco, dei umas pesquisa no google, mas o que encontrei era mt básico.

 

Abraços e até mais :thumbsup:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Com cálculos matriciais, como o Rodrigo disse, dá pra fazer criptografia e até utilizar posteriormente em sistemas.

 

Eu fiz um que, apesar de estar com alguns bugs e eu não ter dado continuidade, pode ser visto aqui: :seta: http://matheustavares.com.br/cripto/

Para criptografar, deixe a "Frase-Chave" em branco.

 

Um abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa noite pessoal, alguém tem alguns exercicios de arrays para eu treinar um pouco, dei umas pesquisa no google, mas o que encontrei era mt básico.

 

Abraços e até mais :thumbsup:

 

Given an array of integers where some numbers repeat 1 time, some numbers repeat 2 times and only one number repeats 3 times, how do you find the number that repeat 3 times.

 

Dada uma matriz de inteiros onde alguns números se repetem 1 vez, alguns números repetem 2 vezes e apenas 1 número se repete 3 vezes, como você encontraria o número que se repete 3 vezes.

 

A matriz:

 

<?php
$magic = rand( 0 , 5 );
$array = array_merge( range( 0 , 10 ) , range( $magic , 10 , 2 ) , array( $magic ) );

shuffle( $array );

 

rand() :seta: Gera um inteiro aleatório

array_merge() :seta: Mescla duas ou mais matrizes.

range() :seta: Cria uma matriz contendo elementos em um intervalo definido.

shuffle() :seta: Embaralha os elementos de uma matriz.

 

Aqui vai um exemplo totalmente algorítmico, mapeando e reduzindo a matriz.

 

<?php
$magic = rand( 0 , 5 );
$array = array_merge( range( 0 , 10 ) , range( $magic , 10 , 2 ) , array( $magic ) );

shuffle( $array );

$mapped = array();

foreach ( $array as $value ) {
if (  !isset( $mapped[ $value ] ) ) {
	$mapped[ $value ] = array();
}

$mapped[ $value ][] = $value;
}

foreach ( $mapped as $value => $mv ) {
if ( count( $mv ) == 3 ) {
	echo 'O valor ', $value, ' tem 3 elementos.', PHP_EOL;
}
}

 

Tente melhorar o código acima, removendo os loops e utilizando as funções nativas do PHP :seta: http://www.php.net/m.../book.array.php

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado João, vou estudar ele e depois posto o resultado.

 

Não deixe de postar, se mais alguém quiser brincar também, poste aqui o código;

 

Assim que postarem, eu posto a solução e um novo problema.

 

;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Daniel R. Gomes, o João já disse o que seria o ideal:

 

Tente melhorar o código acima, removendo os loops e utilizando as funções nativas do PHP eta: http://www.php.net/m.../book.array.php

 

Se tiver alguma solução, poste o seu código já que a brincadeira é aberta.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Daniel R. Gomes, o João já disse o que seria o ideal:

Não, William, o João não disse o que é o ideal. Ele deu uma dica de otimização.

 

O ideal, além do que eu já salientei, é utilizar um HashMap aliado a um algorítmo de ordenação.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não, William, o João não disse o que é o ideal. Ele deu uma dica de otimização.

 

Disse sim, Daniel, na verdade fui bem claro ao dizer:

 

Tente melhorar o código acima, removendo os loops e utilizando as funções nativas do PHP

 

O ideal. além do que eu já salientei, é utilizar um HashMap aliado a um algorítmo de ordenação.

 

A brincadeira é aberta Daniel, poste sua solução.

 

Garanto que se você partir por esse caminho, vai se surpreender quando eu postar a resolução do problema.

 

;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Disse sim, Daniel, na verdade fui bem claro ao dizer:

Bom, só respondi porque não ví essa sua observação como sendo a definição do caminho ideal, e sim como uma simples dica de otimização.

 

Na realidade, depois de analisar melhor o problema, percebi que um HashMap e ordenação não são necessários para encontrar uma solução.

 

Porém, não sei se existe uma solução de complexidade temporal O(n) e complexidade espacial O(1).

Compartilhar este post


Link para o post
Compartilhar em outros sites

O meu vale tio João? :P

 

$magic = rand( 0 , 5 );
$array = array_merge( range( 0 , 10 ) , range( $magic , 10 , 2 ) , array( $magic ) );

shuffle( $array );

$n = 3; //Número de repetições que será procurado

$key = array_search($n,array_count_values($array));

echo 'O valor '.$key.' tem '.$n.' elementos.'.PHP_EOL;

Compartilhar este post


Link para o post
Compartilhar em outros sites

O meu vale tio João?

 

Não só vale, como é a resposta esperada.

 

array_search() com array_count_values() é a solução adequada para o problema.

 

<?php
$magic = rand( 0 , 5 );
$array = array_merge( range( 0 , 10 ) , range( $magic , 10 , 2 ) , array( $magic ) );

shuffle( $array );

//solução
echo 'O valor ' , array_search( 3 , array_count_values( $array ) ) , ' tem 3 elementos' , PHP_EOL;

 

;)

 

:clap:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na realidade a questão da complexidade que eu havia comentado prevalece. Os loops foram removidos, mas a complexidade permanece a mesma O(n), visto que a função array_search utiliza um HashPosition internamente e percorre o array da mesma maneira.

 

Você conhece uma solução menos complexa, João?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo Daniel, se toda vez que percorrermos um array estivermos falando

de Hash Position não vejo outra forma de faze-lo, pois precisamos verificar

seu conteúdo. Como isso poderia ser mais simples se somos obrigados a

percorrer o conteúdo e toda vez que o fazemos estamos utilizando o Hash?

 

Essa eu não entendi. Me corrija se eu estiver errado.

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo Daniel, se toda vez que percorrermos um array estivermos falando

de Hash Position não vejo outra forma de faze-lo, pois precisamos verificar

seu conteúdo. Como isso poderia ser mais simples se somos obrigados a

percorrer o conteúdo e toda vez que o fazemos estamos utilizando o Hash?

 

Essa eu não entendi. Me corrija se eu estiver errado.

 

Abraços.

 

Exatamente, Periscuelo. Não há o que corrigir no seu discurso, e é exatamente por isso que eu fico intrigado.

 

Já havia visto esse problema, só não me recordo onde, e lembro que a grande questão não era resolvê-lo, mas sim encontrar uma maneira menos complexa para tal.

 

Comentei anteriormente que a maneira mais simples seria utilizando hashing ou sorting, e é exatamente isso, guardadas as devidas técnicas e proporções, o que é feito com a função array_search.

 

Depois de pesquisar bastante sobre a funcão array_search, pude constatar que a mesma usa o mesmo core function da função in_array. Esta, por sua vez, é executada em função de N, considerando um array de tamanho N. Assim é executada uma busca linear, gerando uma complexidade de (n).

 

Dessa maneira, portanto, a solução realmente equivale à complexidade de ordem O(n).

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dessa maneira, portanto, a solução realmente equivale à complexidade de ordem O(n).

 

Pessoal não viajemos,

 

Vamos ler novamente o tópico:

 

Boa noite pessoal, alguém tem alguns exercicios de arrays para eu treinar um pouco, dei umas pesquisa no google, mas o que encontrei era mt básico.

 

O amigo André quer exercícios de arrays para treinar um pouco, não alguns exercícios sobre algorítimos.

 

Se fosse assim, eu teria movido o tópico para o fórum de Lógica de Programação e Algorítimos

 

Então, como nosso amigo Periscuelo já respondeu adequadamente o problema, vamos para um próximo:

 

:seta:

 

Dada uma matriz contendo as alturas de 30 alunos de uma sala de aula, informe quais alunos estão na média de altura, os que estão acima da média e os alunos que estão abaixo da média.

 

A matriz segue abaixo:

 

<?php
$alunos = array(
1.65 , 1.75 , 1.75 , 1.95 , 1.71,
1.75 , 1.83 , 1.72 , 1.73 , 1.74,
1.68 , 1.75 , 1.78 , 1.67 , 1.76,
1.87 , 1.75 , 1.81 , 1.74 , 1.92,
1.74 , 1.76 , 1.72 , 1.73 , 1.75,
1.76 , 1.75 , 1.68 , 1.67 , 1.78,
);

 

Aqui vai um exemplo totalmente algorítmico, calculando o desvio padrão:

 

<?php
$alunos = array(
1.65 , 1.75 , 1.75 , 1.95 , 1.71,
1.75 , 1.83 , 1.72 , 1.73 , 1.74,
1.68 , 1.75 , 1.78 , 1.67 , 1.76,
1.87 , 1.75 , 1.81 , 1.74 , 1.92,
1.74 , 1.76 , 1.72 , 1.73 , 1.75,
1.76 , 1.75 , 1.68 , 1.67 , 1.78,
);

sort( $alunos );

for ( $i = 0 , $t = count( $alunos ) , $m = 0 ; $i < $t ; ++$i ) {
$m += $alunos[ $i ];
}

for ( $s = 0 , $i = 0 , $m /= $t ; $i < $t ; ++$i ) {
$s += pow( $alunos[ $i ] - $m , 2 );
}

for ( $i = 0 , $s = sqrt( $s / ( $t - 1 ) ) ; $i < $t ; ++$i ) {
if ( $alunos[ $i ] < $m - $s ) {
	printf( "%f está abaixo da média\n" , $alunos[ $i ] );
} elseif ( $alunos[ $i ] > $m + $s ){
	printf( "%f está acima da média\n" , $alunos[ $i ] );
} else {
	printf( "%f está na média\n" , $alunos[ $i ] );
}
}

 

Tente melhorar o código acima, removendo os loops e utilizando as funções nativas do PHP :seta: http://www.php.net/manual/en/book.array.php

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.