• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

André Sousa

Classificar números.

5 mensagens neste tópico

Boas. Tenho tentado resolver um problema mas dá-me sempre erro. O problema é o seguinte:

Os números podem classificar-se em reduzidos, perfeitos ou abundantes conforme sejam inferiores, iguais ou superiores à soma dos seus divisores(excluindo o próprio numero). Implemente um programa, de forma modular, que:

-> classifique os números de 1 a 100 de acordo com o critério anterior

-> determine, para o mesmo intervalo, quantos números existem de cada tipo

Fiz da seguinte forma:

public class Ex1 {
    public static void classificação(int x){
        int reduzido = 0, perfeito = 0, abundante = 0;
         for(int i=1; i<=100;i++){
             if(i==x){
                 System.out.println("É perfeito o número"+i);
                 perfeito++;
             }
                 else{
                     if(i<x){
                         System.out.println("É reduzido o número"+i);
                         reduzido++;
                     }
                         else{
                         System.out.println("É abundante o número"+i);
                         abundante++;
                             
                         }
                     }
                 }
System.out.println("Existem,"+perfeito+, "perfeitos,"+reduzidos+"Reduzidos,"+abundantes+"abundantes");
       
             }
         
    
    public static void main(String[] args) {
        int soma = 0,
         for(int a=1; a<=100;a++){
             for(int b=1; b<=100;b++){
                 if(a%b==0){
                     soma=soma + a/b;
                 }
                
             }
             
             System.out.println(classificação(soma));
         }
    }

}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se os números podem ser classificados de acordo com a soma dos seus divisores tu não estás a encontrar os divisores, nem a calcular a soma, nem a comparar o número com a dita soma, estás apenas a comparar o i do ciclo com o valor que é passado para a entrada.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Humm...Mas então eu aqui não estou a calcular os divisores e fazer a respectiva soma dos divisores de cada numero entre 1 a 100?

   public static void main(String[] args) {
        int soma = 0,
         for(int a=1; a<=100;a++){
             for(int b=1; b<=100;b++){
                 if(a%b==0){
                     soma=soma + a/b;
                 }

             }

             System.out.println(classificação(soma));
         }
    }

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se estás a fazer isso aí, então não percebi qual o objectivo do método classificação, uma vez que estás a percorrer 100 valores quando o que querias era comparar dois, a soma e o valor indicado.

E essa soma tem o valor da divisão e não do divisor. Se por exemplo a=15 e b=3, 3 é divisor mas estás a somar 15/3 = 5.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Reestruturei o meu programa da seguinte forma:

public class Ex1{
    public static int somadivisores(int x){
        int soma = 0;
        int quociente;
            for(int t=1;t<x/2;t++){
              if(x%t==0){
                  quociente=x/t;
                  soma = (soma + x/quociente) ;
             }
              
          }
        return soma;
    }
    public static void main (String[] args){
        int somaresultado;
        int perfeito=0, reduzido=0, abundante=0;
        for(int i=1;i<=100;i++){
            somaresultado = somadivisores(i);
              if(i==somaresultado){
                  System.out.println(+i+", é perfeito");
                       perfeito = perfeito + 1;
        }
              else{
               if(i<somaresultado){
                   System.out.println(+i+", é reduzido");
                        reduzido = reduzido + 1;
               }
               else{
                   System.out.println(+i+",é abundante");
                        abundante = abundante + 1;
                
              }
            
              }
                          
            
        }
   System.out.println("Existem,"+perfeito+",números perfeitos,"+reduzido+",números reduzidos,"+abundante+",números abundantes"); 
               
}
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora