domingo, 19 de febrero de 2012

project euler # 32

este problema me costo algo pero al menos encontre una forma mas optima de lo que vi en internet

import java.util.HashSet;
import java.util.Iterator;
import java.util.Scanner;
import java.util.Set;


public class problem32 
{
 public static void main(String[] args) {
  
  long tiempo = System.currentTimeMillis();
  HashSet b= new HashSet();
  String cad;
  String n;
  for (int i = 1; i < 8; i++) {
   for (int j = 1000; j < 10000; j++) 
   {
      cad=Integer.toString(i*j);
      n= Integer.toString(i)+Integer.toString(j);
      if((n+cad).length()==9)
      {
       if(ispandigital(n+cad))
       {
        b.add(i*j);
       }
        
      }
   }
  }
  for (int i = 10; i < 100; i++) {
   for (int j = 100; j < 1000; j++) 
   {
    cad=Integer.toString(i*j);
      n= Integer.toString(i)+Integer.toString(j);
      if((n+cad).length()==9)
      {
       if(ispandigital(n+cad))
       {
        b.add(i*j);
       }
        
      }
   }
  }
  int c =0;
  for( Iterator it = b.iterator(); it.hasNext(); ) { 
  c=c+it.next(); } 
  System.out.println(c);
  System.out.println(System.currentTimeMillis()-tiempo);

  
 }
 public static boolean isPandigital(String all){
        if(all.length() != 9) return false;
        String arr[] = all.split("");
        
        for(int i=1; i<=9; ++i){
                boolean varMi = false;
                String son = Integer.valueOf(i).toString();
                
                for(int j=0; j<10; ++j){
                        if(arr[j].equals(son)){
                                varMi = true;
                                break;
                        }
                }
                if(!varMi) return false;
        }
        return true;
 }
 public static boolean ispandigital(String x)
 {
  boolean v[]= new boolean[10];
 
 
  for (int i = 0; i < x.length(); i++) 
  {
   
   v[x.charAt(i)-48]=true;
   
       
  }
  for (int i = 1; i < 10; i++) 
  {
   if(!v[i])
   return false;
       
  }
  
   return true;
 }
   
}

No hay comentarios:

Publicar un comentario