lunes, 20 de febrero de 2012

Problem Euler 18 y 67

Empezando con DP
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class problem18 
{
 public static void main(String[] args) throws FileNotFoundException {
  int m[][]=readArch();
  for (int i = m.length-2; i >=0; i--) 
  { 
   for (int j = 0; j <=i; j++) {
    
    m[i][j]+=Math.max(m[i+1][j+1], m[i+1][j]);
   }
  }
  System.out.println(m[0][0]);
 }

 private static int[][] readArch() throws FileNotFoundException 
 {
  int triangulo[][]= new int [150][150];
  Scanner sc = new Scanner (new File("C:\\triangle1.txt"));
  int co=0,fi=0;
  while(sc.hasNextLine())
  {
   String linea = sc.nextLine();
   String v[]= linea.split(" ");
   for (int i = 0; i < v.length; i++) 
   { 
    co=i;
    triangulo[fi][co]=Integer.parseInt(v[i]);  
   } 
   fi++;
  }
  return triangulo;
 }
}

domingo, 19 de febrero de 2012

project euler # 41

una variacion del problema 32

import java.util.Arrays;
import java.util.BitSet;
import java.util.Scanner;


public class problem41 
{
 public static void main(String[] args) 
 {


  long tiempo= System.currentTimeMillis();
  BitSet a = new BitSet(987654321);
  int i =2,j=0;
  for(i=2;(i*i)<=10000000;i=i+1)
  {
   if(!a.get(i))
   {
    for(j=i+i;j<=10000000;j=j+i)
    {
     a.set(j);
    } 
   }
  }
  for (int j2 =7654321; j2 >=1 ;j2--) 
  {
   String x=Integer.toString(j2);
   char v[]= x.toCharArray();
   Arrays.sort(v);
   if(!a.get(j2))
   {
    if(ispandigital(x, v[v.length-1]-48))
    {System.out.println(x);
    break;
    }
   }
  }
  System.out.println(System.currentTimeMillis()-tiempo);
 }
 public static boolean ispandigital(String x,int n)
 {
  boolean v[]= new boolean[n+1];
  for (int i = 0; i < x.length(); i++) 
  {
   v[x.charAt(i)-48]=true;
  }
  for (int i = 1; i < n+1; i++) 
  {
   if(!v[i])
    return false;
  }

  return true;
 }
}

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;
 }
   
}

miércoles, 15 de febrero de 2012

proyect euler 40


public class problem40 
{
 public static void main(String[] args) 
 {
  StringBuffer a = new StringBuffer();
  a.append("123456789");
  int n =1;
  while(n<=100000)
  {
   for(int i = 0; i <=9; i++) 
   {
    String elem = Integer.toString(n)+Integer.toString(i);
    a.append(elem); 
   }
   n++;
  }
  int p =1;
  int c =1;
  for (int i = 0; i <= 6; i++) 
  {
       c=c*(a.charAt(p-1)-48);
       p=p*10;
  }
  System.out.println(c);
 }
}


martes, 14 de febrero de 2012

Project Euler 24

#include <iostream>
#include <algorithm>
using namespace std;

int main()
{
    int myints[] = {0,1,2,3,4,5,6,7,8,9};
    reverse(myints,myints+10);
    for(int i=0; i<1000000; i++)
    {
        next_permutation (myints,myints+10);
    }

    cout << myints[0] << myints[1]  << myints[2] <<  myints[3]<< myints[4] <<  myints[5]<< myints[6]<< myints[7]<< myints[8]<<myints[9]<<endl;

    return 0;
}




Project Euler 23

#include <iostream>
#include <string.h>
#define tam 28123
using namespace std;
static int vec[tam];
static bool vec2[tam];
int sum_div(int n)
{
    int sum=1;
    for(int i=2; i<=n/2; i++)
    {
        if(n%i==0)
        {
            sum+=i;
        }

    }
    return sum;
}
int main()
{
    int conta=0;
    for(int i=1; i<tam; i++)
    {
        if(sum_div(i)>i)
        {
            vec[conta]=i;
            conta++;
        }
    }
    memset(vec2,true,tam);
    int sum_abun=0;
    for(int r=0; r<conta; r++)
    {
        for(int i = 0; i < conta; i++)
        {
            sum_abun=vec[r] + vec[i];
            if(sum_abun <= tam)
            {
                vec2[sum_abun] = false;
            }
        }
    }
    int tot = 0;
    for(int i=0; i<tam; i++)
    {
        if(vec2[i])
            tot +=i;
    }
    cout<<tot<<endl;

    return 0;
}

problem euler 23



import java.util.Arrays;
import java.util.Iterator;
import java.util.TreeSet;


public class problem23 
{
 static TreeSet a ;
 public static void main(String[] args) {
  
  int c=0;
  int v[]=new int [6965];
  boolean v1[]= new boolean [28124];
  Arrays.fill(v1, false);
  for (int i = 1; i <=28123 ; i++) 
  {
   if(nro(i)>i)
   {
    v[c]=i;
    System.out.println(v[c]+" "+ c);
    c++;
    
   }
  }
  System.out.println("paso1");
  long co=0;
  TreeSet a= new TreeSet();
  
  for (int i = 0; i < v.length; i++) 
  {
   
   for (int j = 0; j < v.length; j++) 
   {
    if((v[i]+v[j])<=28123)
      v1[v[i]+v[j]]=true;
    
    
   }
  }

  for (int i = 1; i <=28123; i++) 
  {
     if(!v1[i])
      co=co+i;
  }
  System.out.println(co);
 }
 public static int nro(int n )
 {
  int c =0;
  
  for (int i = 1; i <= n/2; i++) 
  {
   if(n%i==0)
    c=c+i;
  }
  return c;
 }
}