Atividade: Crie um programa que determine os 3 primeiros números perfeitos,
armazenando-os em um array. Mostre o conteúdo do array. Um número n > 0 é perfeito
quando a soma dos seus divisores (exceto ele mesmo) é exatamente igual a n.
Exemplo: 6 -> 1+2+3 = 6
alguém q entenda o proposto pode me ajudar? gostaria de uma lógia pra desenvolver, sintaxe eu sei, mas não consigo pensar nisto!
ta osso =(
Como descobrir quais são os divisores de um número?
Resposta: Obtenha o resto da divisão desse número por todos os números entre 1 e metade dele. Os que forem resto == 0, são divisores.
Exemplo: Os divisores de 10:
1 - 10 / 1 = 10, resto 0. 1 é divisor.
2 - 10 / 2 = 5, resto 0. 2 é divisor
3 - 10 / 3 = 3, resto 1. 3 não é divisor
4 - 10 / 4 = 2, resto 2. 4 não é divisor.
5 - 10 / 5 = 2, resto 0. 5 é divisor.
Os divisores são: 1, 2 e 5. A soma deles é 8, logo 10 não é um número perfeito.
Nenhum número após o 5 será divisor, pois 5 é a metade de 10. Qualquer número após a metade terá como resultado da divisão 1 e resto igual a ao divisor - dividendo. Outro divisor possível é o próprio número, entretanto, ele não é levado em conta para o caso dos números perfeitos.
Ok. Agora que você já sabe os divisores, basta soma-los. E então, compara-los com o número original.
Dica: Se possível, use um arrayList para armazenar os divisores. Se não for possível, use um vetor de ints, de tamanho igual ao número / 2. E use uma variável contadora para saber quantos divisores foram encontrados.
Facinho…ainda mais com a explicação do Vini!
Manda vê ae!
poxa, vlw mesmo denovo salvando meus estudos ^^
eh meu problema mesmo é descobrir a lógica do problema, agora eh só jogar no inglês do java hehe e pronto !!
vou tentar resolver ^^
obg!
Na verdade a parte boa é essa: Criar a lógica.
Passar pro JAVA é o mínimo!!
Abraços
pois é, e é isso q to precisando, se alguem souber algo q me ajudar aprimorar a lógica eu agradeço, sei q lógica vc nao aprende vc aperfeiçoa, cada um tem a sua do tamanho da qual estudou para adquirir, ow tem um super dotados ae tbm q nem se fala neh!
Aprender com os erros é uma forma de aprimorar sua lógica…
Estudar…Estudar…Estudar…Estudar…
Pronto. Formula dada!
[code]
import java.util.Scanner;
public class ola
{
public static void main(String[] args)
{
int nr, x;
Scanner guarda = new Scanner(System.in);
System.out.print("Digite um nr para verificar se eh perfeito: ");
x = guarda.nextInt();
nr = x/2;
int[] perfeito = new int[3];
for(int a = 1; a <=nr; a++)
{
if(x%a == 0)
{
System.out.printf("\n o divisor de %d: é %d ", x, a);
}
}//fim for
}//fim metodo
}//fim class[/code]
Consegui fazer só até aq, não consegui fazer a variável “a” ser armazenada no array, e depois fazer a soma deles =(
alguém me ajuda? novamente =S
Escrevi bosta, ja q edito
O que você está fazendo está errado…
Você tem que ver o resto do número.
Dei uma editada, mas to sem eclipse aki, e não testei.
Testa ae:
[code] import java.util.Scanner;
public class ola {
public static void main(String[] args) {
int nr, x;
int soma = 0;
Scanner guarda = new Scanner(System.in);
int a =0;
System.out.print("Digite um nr para verificar se eh perfeito: ");
x = guarda.nextInt();
for (a = 1; a < x; a++) {
nr = x%a;
if (nr==0) {
soma = soma + a;
}
}
if (soma == a) {
System.out.println("É perfeito.");
} else {
System.out.println("Não é perfeito");
}
}// fim metodo
} [/code]
Mas creio que o que a atividade quer é pegar os 3 primeiros perfeitos, de todos os numeros naturais…
Então, essa seria a solução:
[code]public class ola {
public static void main(String[] args) {
int nr=0, x=0, soma=0, a=0, cont = 0;
int[] perfeito = new int[4];
boolean flag = true;
while (flag) {
if (cont == perfeito.length) {
flag = false;
for (cont = 0; cont < perfeito.length; cont++) {
System.out.println("Perfeito " + (cont + 1) + ": "
+ perfeito[cont]);
}
break;
}
for (a = 1; a <= (x/2); a++) {
nr = x % a;
if (nr == 0) {
soma = soma + a;
}
}
if (soma == x) {
perfeito[cont] = x;
cont++;
}
soma = 0;
x++;
}
}
}[/code]
Saída:
Perfeito 1: 0
Perfeito 2: 6
Perfeito 3: 28
Perfeito 4: 496
Se tentar com um numero grande nao vai dar certo… Com 5 você já percebe um certo delay
Ae vlw pela dica de todos ^^
até q enfim consegui chegar no resultado esperado 8)
aff iniciante é complicado, rala mesmo hehe
tive q usar SystemPrint pq printf não funciona no eclipse aq ainda =( desatualizado
[code]
import java.util.Scanner;
public class SlideQuatroEx1
{
public static void main(String[] args)
{
/*
Atividade: Crie um programa que determine os 3 primeiros números perfeitos,
armazenando-os em um array. Mostre o conteúdo do array. Um número n > 0 é perfeito
quando a soma dos seus divisores (exceto ele mesmo) é exatamente igual a n.
Exemplo: 6 -> 1+2+3 = 6
*/
Scanner guarda = new Scanner(System.in);
int nr=0, x=0, y, soma=0;
boolean flag = true;
System.out.printf("informe um nr para verificar se eh perfeito: ");
nr = guarda.nextInt();
int perfeito[] = new int[3];
x = (nr/2);
for(int a = 1; a<=x; a++)
{
y = nr%a;
if(y==0)
{
for(int b = 0; b<1; b++)
{
perfeito[b] = a;
System.out.printf("divisores de %d é: %d \n", nr,a);
soma = soma + perfeito[b];
}
}
}
if(soma == nr)
{
System.out.print("é Perfeito, pois a Soma dos Divisores é: ");
System.out.print(soma);
}
else
{
System.out.print("Não é Perfeito, pois a Soma dos Divisores é: ");
System.out.print(soma);
}
//numeros perfeitos para teste: 6, 28, 496 e 8.128.
}//fim main
}//fim class[/code]
pedroroxd o seu código é diferente neh =)
mas ta massa tbm ^^
vlw =)
o meu ta funcionando legal testei com o seus nr perfeitos, hehe tive q pesquisar pra ver quais eram perfeitos, mas vi q vc deixou uma listinha ae =)
abraço!
- um caso resolvido… ufaaaa
Blza!
Isso que é o legal de programação e algorítimos… Diferentes caminhos para chegar em um mesmo resultado (parece até minha professora de matemática falando! kkkk)
Bons estudos ! =)