Friday 17 April 2009

PROJECT EULER #52

Link to Project Euler problem 52


It can be seen that the number, 125874, and its double, 251748, contain exactly the same digits, but in a different order.
Find the smallest positive integer, x, such that 2x, 3x, 4x, 5x, and 6x, contain the same digits.


using System;
using System.Collections.Generic;

namespace project_euler
{
class Program
{
static void Main()
{
//Problem 52
DateTime start = DateTime.Now;
long i = 1, result = 0;
bool test = true;
while (test)
{
if (SameDigits(i,2*i)&&SameDigits(i,3*i)&&SameDigits(i,4*i)&&SameDigits(i,5*i)&&SameDigits(i,6*i))
{
result = i;
test = false;
}
i++;
}
Console.WriteLine(result);
TimeSpan time = DateTime.Now - start;
Console.WriteLine("This took {0}", time);
Console.ReadKey();
}

public static bool SameDigits(long n,long m)
{
List<char> firstNumber = new List<char>();
List<char> secondNumber = new List<char>();
char[] c = n.ToString().ToCharArray();
char[] d = m.ToString().ToCharArray();
if (c.Length != d.Length)
return false;
foreach (var c1 in c)
firstNumber.Add(c1);
firstNumber.Sort();
foreach (var d1 in d)
secondNumber.Add(d1);
secondNumber.Sort();
for (int i = 0; i < firstNumber.Count; i++)
{
if (firstNumber[i] != secondNumber[i])
return false;
}
return true;
}
}
}

No comments: