Mathematische Programmieraufgaben
by admin on Aug.26, 2009, under Allgemein
Durch Zufall hab ich Project Euler endeckt. Hierbei handelt es ich um eine Seite, welche im Moment ca. 250 “mathematische Augaben” beinhaltet, die dann mit einer beliebigen Programmiersprache gelöst werden können.
Generell sollten alle Algorythmen die gestellte Aufgabe in unter einer Minute lösen.
Wenn man sich registriert hat, kann man die Antwort eingeben und falls diese richtig ist, wird das vermerkt. Man kann sich verschiedene Statistiken anschauen, z.b. wieviele Leute ein Problem schon gelöst haben, bzw mit welcher Programmiersprache. Auch gibt es 6 Level die man erreichen kann. Level 6 (fast alle Aufgaben gelöst) haben z.b. im Moment nur < 100 Personen.
Hier mal die ersten 4 Lösungen in Java. Wer die Augaben noch nicht selber gelöst hat und noch lösen will, schaut bitte nicht hin
Augabe 1:
long time = System.currentTimeMillis();
int sum = 0;
for (int i = 999; i > 0; i–) {
if(i%3 == 0){
sum += i;
}
else if(i%5 == 0){
sum += i;
}
}
System.out.println("Euler1: "+(System.currentTimeMillis()-time)+" ms ->"+sum);
Aufgabe 2
long time = System.currentTimeMillis();
long sum = 0;
int last = 0;
int current = 1;
int next = 0;
while(true) {
next = current + last;
last = current;
current = next;
if(current%2==0){
if(current < 4000000){
sum += current;
}else{
break;
}
}
}
System.out.println("Euler2: "+(System.currentTimeMillis()-time)+" ms ->"+sum);
Aufgabe 3:
long time = System.currentTimeMillis();
long erg = Long.valueOf("600851475143");
ArrayList<Long> primes = new ArrayList<Long>();
for(long xt = 0; xt < 100000; xt++){
if(!(xt%2 == 0)){
boolean prime = true;
for(long back = ((xt-1)/2); back > 1; back--){
if(xt%back==0){
prime = false;
}
}
if(prime){
if(erg % xt == 0){
primes.add(xt);
}
}
}
}
System.out.println("Euler3: "+(System.currentTimeMillis()-time)+" ms ->"+primes.get(primes.size()-1));
Aufgabe 4:
long time = System.currentTimeMillis();
ArrayList<Integer> palindrome = new ArrayList<Integer>();
for(int i = 100; i < 1000; i++){
for(int v = 100; v < 1000; v++){
int erg = i*v;
String number = String.valueOf(erg);
char[] chars = number.toCharArray();
if(chars.length%2==0){
boolean same = true;
for(int x = 0; x < chars.length/2; x++){
int y = (chars.length-1)-x;
int ch1 = Integer.valueOf(String.valueOf(chars[x]));
int ch2 = Integer.valueOf(String.valueOf(chars[y]));
if(!(ch1 == ch2)){
same = false;
}
}
if(same){
palindrome.add(Integer.valueOf(number));
}
}
}
}
int finalNumber = 0;
for (int i = 1; i < palindrome.size(); i++) {
if(finalNumber < palindrome.get(i).intValue()){
finalNumber = palindrome.get(i).intValue();
}
}
System.out.println("Euler4: "+(System.currentTimeMillis()-time)+" ms ->"+finalNumber);