Ir para conteúdo
Fórum Script Brasil
  • 0

Algorítmo - Número Perfeito


salut

Pergunta

Bom dia pessoal! sou novo no fórum e não entendo perfeitamente como é o funcionamento da pagina. Dessa forma, peço desculpas caso esteja na área errada ou que tenha desorganização no meu post. Estou com dúvida em um exercício, e antes de escrevê-la, eis o enunciado da mesma:

---------------------------------------------------------------------------------------------------------------------------------------------

Diz-se que um número inteiro é um número perfeito se a soma de seus fatores, incluindo 1 (mas não o numero em si),
resulta no próprio número. Por exemplo, 6 é um número perfeito porque 6 = 1 + 2 + 3. Escreva uma função perfeito
que determine se o parâmetro numero é um número perfeito. Use essa função em um programa que determine e imprima
todos os números perfeitos entre 1 e N. Imprima os fatores de cada número encontrado para confirmar que ele é 
realmente perfeito. 

---------------------------------------------------------------------------------------------------------------------------------------------

Eu consigo identificar se o número é perfeito dessa forma:

---------------------------------------------------------------------------------------------------------------------------------------------

for(i=1; i<n; ++i){
    if (n%i == 0) soma=soma+i;
}
    if (n == soma) {
printf("%d é um numero perfeito.\n",n);

    else {        
    printf("%d não é um numero perfeito.",n);
}
return 0;
}

---------------------------------------------------------------------------------------------------------------------------------------------

A minha dúvida é como posso armazenar esses números e os seus fatores, para lista-los no final da execução do programa. Sou iniciante, perdoem os erros e as dúvidas simples, e agradeço desde já qualquer ajuda ou sugestão!

Editado por salut
Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

Boa noite, existe algumas opções que você pode usar, tais como ponteiros, listas.

Observe o exemplo abaixo usando a biblioteca vector disponível  no c++.

#include <iostream>
#include <vector>

using namespace std;

int main(){
	int n=6;
	vector<int> fatores;
	int soma=0;
	for(int i=1; i<n; ++i){
    	if (n%i == 0){
    		soma=soma+i;
    		//armazenando os números na lista
    		fatores.push_back(i);
		}
	}
    if (n == soma) {
		printf("%d é um numero perfeito.\n",n);
		//imprimindo a lista.
		for (vector<int>::iterator it = fatores.begin(); it != fatores.end(); ++it){
			cout<<*it<<" ";
		}
	} 
    else {        
    	printf("%d não é um numero perfeito.",n);
	}
	return 0;
}

 

Link para o comentário
Compartilhar em outros sites

  • 0

salut na verdade não precisam serem armazenado e sim imprimidos

Transforme seu código em função como no enunciado pede:


/**
  * Determina se um numero é perfeito
  * retorna 0 se for perfeito ou um numero diferente de zero
  */

int perfeito(int n)
{
  int soma = 0;

  // valida se é perfeito
  for(int i  = 1; i < n; ++i)
  {
    soma = soma + i;
    if (n == soma)
      return 0; // é perfeito
  }

  return -1; // não é perfeito
}

faça uma função que imprima os fatores ou só acrescentar em main se quiser:

/**
  * Imprime fatores se o numero for perfeito
  */

// Como a função só imprime ela não retorna nada
void imprimePerfeito(int n)
{
  int soma = 0;

  if( n == 1)
  {
    printf("1 = 1\n"); // 1 é numero perfeito
    return;
  }

  // se for um numero perfeito então imprime
  if(perfeito(n) == 0)
  {
    printf("%i = ", n);
    for(int i = 1; soma != n; i++) // sai do loop quando soma for diferente ao numero perfeito
    {
      if(i == 1) // primeiro não precisa do sinal '+"
        printf("%i ", i);
      else
        printf("+ %i ", i);

      soma = soma + i;
    }
    printf("\n");
  }
}

 

Então em main você fará o seguinte:

 

...
//includes

int perfeito(int n);
void imprimePerfeito(int n);

int main(void)
{
  int n;
  //pedirá entrada ao usuário
    
  // loop até n e imprimindo numeros perfeitos
  for(int i = 1; i <=n; i++)
    imprimePerfeito(i);
  
  return 0;
}

...
// Declarações de funções as duas acima 

 

Editado por dani0liveira
Corrigido erros de lógica
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...