ITflow.de

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

Leave a Reply

You must be logged in to post a comment.

Looking for something?

Use the form below to search the site:

Still not finding what you're looking for? Drop a comment on a post or contact us so we can take care of it!

Visit our friends!

A few highly recommended friends...