Números Mágicos

3 respostas
S

Olá...
É o meu primeiro post...
Desculpem se eu errar algo...

Minha dúvida é a seguinte...

Eu tenho q fazer um programa com essas descrições:

Um programa que leia do teclado um número inteiro N.
Após a leitura de N, seu programa deve imprimir todos os números mágicos relativos a N.
Isto é, seu programa deve imprimir, no formato indicado no exemplo abaixo, todos os pares de números inteiros positivos n1 e n2 tais que n1/n2 = N.

Exemplo A)

A saída abaixo ilustra uma possível execução do programa, em que são digitados quatro números:

Digite um numero inteiro: [telefone removido]
[telefone removido] / 1 = [telefone removido]
[telefone removido] / 2 = [telefone removido]
[telefone removido] / 4 = [telefone removido]
[telefone removido] / 5 = [telefone removido]
[telefone removido] / 7 = [telefone removido]
[telefone removido] / 8 = [telefone removido]
Gerou 6 pares de numeros

Digite um numero inteiro: -56744
Nao ha numeros magicos

Digite um numero inteiro: 10345678
10345678 / 1 = 10345678
51728390 / 5 = 10345678
951802376 / 92 = 10345678
Gerou 3 pares de numeros

Digite um numero inteiro: 0
Fim de programa

Conseguir fazer até a impressão, o problema é que ele tá fazendo impressão de números repetidos, o que é proibido...
Estou tentando relacionar o boolean de baixo com o dif (n1) && dif (n2)..
Dêem uma olhada...

import java.io.*;
 import java.util.*;
    class M0680192 {
  public static void main(String[] args) {  
    Scanner tec = new Scanner(System.in);
    long N,n1,n2;
        System.out.println("Olá. Bem vindo ao meu quarto programa!");
        System.out.println("\nNúmeros Mágicos");
        System.out.print("\nDigite um número N>0: ");
            N = tec.nextLong();
            do{
                for(n2=1, n1=N; n1<1000; n2++,n1=N*n2)
                    if (dif(n1)&& dif(n2)){
                        System.out.println("Os números mágicos são: "+n1+ " e "+n2);
            }
        } 
            while (n1<1000);
        }
    static boolean dif(long n) {
        boolean dif = true;
            String ns = Long.toString(n);
            for(int i = 0, j= 1; i < ns.length(); i++,j++){
                for(; j <= (ns.length()-1); j++){
                    if(ns.charAt(i)!= ns.charAt(j)){
                        return dif;
                    }
                        else   
                            continue;
        }
        }
               return true;
    }
}

Acho q fiz até uma bagunça...
Como simplificar também??

3 Respostas

S

alguem???

pmlm

Esse método dif está muito confuso…

Tenta algo assim (não testei mas não deve andar muito longe de estar correcto)

static boolean dif(long n) {  
             String ns = Long.toString(n);  
             if (ns.length() > 10){
                      return false; // tem mais de 10 digitos, obrigatoriamente tem de haver repetidos 
             }
            
             for(int i = 0, i < ns.length()-1; i++,){  
                 for(j = i + 1 ; j < ns.length(); j++){  
                     if(ns.charAt(i)== ns.charAt(j)){  
                         return false;  //encontrou dígitos iguais
                     }  
                  }  
             }  
             return true;  
     }
S

Deu certo…
Vlw mesmo ae…

Criado 18 de maio de 2009
Ultima resposta 19 de mai. de 2009
Respostas 3
Participantes 2