Exercicios com Vetores - Soluções
Dada uma seqüência de n números reais, determinar os números que compõem a sequência e o número de vezes que cada um deles ocorre na mesma.
Exemplo: n = 8
Seqüência: -1.7, 3.0, 0.0, 1.5, 0.0, -1.7, 2.3, -1,7
Saída:
-1.7 ocorre 3 vezes
3.0 ocorre 1 vez
0.0 ocorre 2 vezes
1.5 ocorre 1 vez
2.3 ocorre 1 vez
Algumas possíveis soluções seguem abaixo:
Solução 1:
#include <iostream>
using namespace std;
int main() {
int n; /* numero de elementos da sequencia */
cout << "Digite o numero de elementos da sequencia: ";
cin >> n;
cout << "Digite uma sequencia de " << n << " números reais: " << endl;
float seq[n]; /*Novo vetor de tamanho n*/
int i = 0;
/*Lê os valores*/
while(i < n){
cin >> seq[i];
i = i + 1;
}
i = 0; /*Reinicia o valor de i para reutilizar ela no novo laço*/
int j = 0; /*Outra variável para auxiliar a percorrer o mesmo vetor em outros índices*/
int vezes = 0; /*Número de vezes que cada número aparece no vetor*/
/* conta o numero de vezes que seq[i] aparece no vetor a partir da posição i */
while(i < n){
vezes = 1;
j = i + 1;
while (j < n)
if (seq[j] != seq[i]){
j = j + 1;
} else {
vezes = vezes + 1;
n = n - 1; /* quando repete, remove */
seq[j] = seq[n];
}
cout << seq[i] << " ocorre " << vezes << " vezes" << endl;
i = i + 1;
}
return 0;
}
Solução 2:
#include <iostream>
using namespace std;
int main() {
int n; /* comprimento da sequencia de entrada */
cout << "Digite o numero de elementos da sequencia: ";
cin >> n;
int conta[n]; /* contador de repeticoes de cada numero da sequencia */
float seq[n]; /* sequencia de entrada sem repeticoes */
int comp = 0; /* comprimento do vetor conta */
int i = 0; /* contador de número de entradas fornecidas pelo usuário */
int j = 0;
cout << "Digite uma sequencia de " << n << " números reais: " << endl;
while(i < n) {
cin >> seq[comp];
/* procura esse numero no vetor seq a partir do inicio */
j = 0;
while(seq[j] != seq[comp]){
/* não faço nada, apenas conto */
j = j + 1;
}
if (j == comp) {
/* se o numero nunca tinha aparecido */
conta[comp] = 1;
comp = comp + 1;
} else {
/* se já apareceu, incrementa o número de vezes que esse número apareceu */
conta[j] = conta[j] + 1;
}
i = i + 1;
}
/* imprime o resultado */
j = 0;
while(j < comp){
cout << "O numero " << seq[j] << " aparece " << conta[j] << " vezes na sequência." << endl;
j = j + 1;
}
return 0;
}
Solução 3:
#include <iostream>
using namespace std;
int main() {
int n; /* numero de elementos da sequencia */
cout << "Digite o numero de elementos da sequencia: ";
cin >> n;
cout << "Digite uma sequencia de " << n << " números reais: " << endl;
float seq[n]; /*Novo vetor de tamanho n*/
int i = 0;
/*Lê os valores*/
while(i < n){
cin >> seq[i];
i = i + 1;
}
i = 0; /*Reinicia o valor de i para reutilizar ela no novo laço*/
int j = 0; /*Outra variável para auxiliar a percorrer o mesmo vetor em outros índices*/
/*Ordena os valores*/
while(i < n){
float aux; /*Variável auxiliar*/
j = 0;
while(j < n-1){
if (seq[j] > seq[j+1] ){
aux = seq[j];
seq[j] = seq[j+1];
seq[j+1] = aux;
}
j = j + 1;
}
i = i + 1;
}
i = 0;
j = 1;
int cont = 1;
/*Conta quantas vezes aparece*/
while(i < n){
while (seq[i] == seq[j]){
cont = cont + 1;
j = j + 1;
}
cout << seq[i] << " ocorre " << cont << " vezes" << endl;
i = j;
cont = 0;
}
return 0;
}