Java :: Aufgabe #256

4 Lösungen Lösungen öffentlich

ÜBUNG ARRAYS- Wie viele Türen stehen am Ende dieses Algorithmus offen?

Anfänger - Java von sinanoz05 - 31.01.2020 um 08:39 Uhr
Ein mittelalterlicher Herrscher nahm bei einem Feldzug 100 Feinde gefangen, die er in 100 Einzelzellen steckte. An seinem Geburtstag sollten einige freigelassen werden, und zwar nach einem sehr speziellen Verfahren. Zunächst werden alle Zellentüren aufgeschlossen. Dann wird in einem zweiten Durchgang jede zweite Türe wieder geschlossen. Im dritten Durchgang wird jede dritte Tür geschlossen, falls sie offen steht, oder geöffnet falls sie geschlossen ist. Und so geht es im nächsten Durchgang weiter, bis zum hundertsten Durchgang. Wieviele Türen stehen am Ende dieses Algorithmus offen?

Verwenden Sie ein Array vom Datentyp bool mit 100 Elementen. True soll eine offene Türe repräsentieren und false eine geschlossene. Erstellen Sie ein Programm um die Anzahl der offenen Türen zu bestimmen und geben Sie das Ergebnis auf der Konsole aus

Lösungen:

vote_ok
von luckyluke (850 Punkte) - 07.02.2020 um 10:44 Uhr
Quellcode ausblenden Java-Code
package com.company;

public class Main {

    public static void main(String[] args) throws InterruptedException {
        // write your code here

        boolean[] doorsOpen = new boolean[100];

        int counter = 0;
        for (int z = 1; z < doorsOpen.length; z++) {

            counter++;

            for (int i = -1 + counter; i < doorsOpen.length; i = i + z) {
                if (doorsOpen[i] == false) {
                    doorsOpen[i] = true;
                } else if (doorsOpen[i] == true) {
                    doorsOpen[i] = false;

                }
               // System.out.println(i+1 + " ist " + doorsOpen[i]);

            }
        }
        // ausgabe
        for (int b = 0; b < doorsOpen.length; b++) {
            if (doorsOpen[b] == true) {
                int doornumber = b+1;
                System.out.println("Tür " + doornumber + " bleibt offen");
            }
        }
    }
}
vote_ok
von yaakoubi (50 Punkte) - 24.02.2020 um 22:38 Uhr
Quellcode ausblenden Java-Code
	boolean[] gefangen = new boolean[100];

		for (int i = 0; i < gefangen.length; i++) {
			gefangen[i] = true;
			if (i % 2 == 0) {
				gefangen[i] = false;
			}

		}

		for (int i = 0; i < gefangen.length; i++) {
			if (i % 2 == 0) {
				gefangen[i] = false;
			}

		}
		for (int i = 0; i < gefangen.length; i++) {
			if (i % 3 == 0) {
				if (gefangen[i] = false) {
					gefangen[i] = true;
				}
				if (gefangen[i] = true) {
					gefangen[i] = false;
				}

			}

		}

		int countT = 0;
		int countF = 0;

		for (int i = 0; i < gefangen.length; i++) {
			if (gefangen[i] == true) {
				countT++;
			}
			if (gefangen[i] == false) {
				countF++;
			}

		}
		System.out.println(countT + " Türen sind offen und " + countF + " sind geschlossen");
vote_ok
von Waldgeist (2310 Punkte) - 09.03.2020 um 19:00 Uhr
Hallo,

ich dachte ich probiere ich auch mal an einer Java Version.
Habe das ganze in IntelliJ IDEA umgesetzt mit Java 13.0.2

Grüße
Waldgeist


Quellcode ausblenden Java-Code
package com.company;

public class Main {

    private static boolean[] Zellen;
    public static void main(String[] args) {
        System.out.println ("Programm zur Ermittlung wieviele Tueren offen stehen.\n\n");
        Zellen = new boolean[100] ;
        for (int i = 1; i <= 100; i++)
        {
            Zellen[i-1] = true;
        }

        for (int d = 2; d <= 100; d++)
        {
            for (int c = 1; c <= 100; c++)
            {
                if ((c % d == 0) & (Zellen[c - 1]) == true)
                {
                    Zellen[c - 1] = false;
                }
                else if ((c % d == 0) & (Zellen[c - 1]) == false)
                {
                    Zellen[c - 1] = true;
                }
            }
        }
        int Anzahl = 0;
        for (int a = 1; a <= 100; a++)
        {
            if (Zellen[a-1] == true)
                Anzahl++;
        }
        System.out.print ("Anzahl offener Tueren: ");
        System.out.print(Anzahl);



vote_ok
von Anfänger (20 Punkte) - 08.12.2020 um 18:08 Uhr
Mir hat die Aufgabe sehr gut gefallen und ich bin auch ein wenig stolz hier eine eigene (wie ich finde deutlich einfachere)
Lösung präsentieren zu können. Ich bin ein absoluter Anfänger. Variablennamen sind aber zugegebenermaßen nicht sehr schön. Ich wollte noch den Lösungswert anfügen, da ich um meine Lösung zu überprüfen eine Lösung von hier in mein Eclipse kopieren musste.. Er ist 10
Quellcode ausblenden C#-Code
public class OffeneTueren {

	public static void main(String[] args) {
		int offenetueren = 0;
		boolean[] array = new boolean[100];
		for (int k = 0; k < array.length; k++) {
			array[k] = true;
		}

		for (int i = 2; i <= 100; i++) {
			for (int z = 1; z < 100; z++) {

				int u = i * z - 1;
				if (u < 100) {
					array[u] = !array[u];
				}
			}
		}
		for (int v = 0; v < 100; v++) {
			if (array[v] == true) {
				offenetueren++;
			}
		}
		System.out.print("Es sind" + offenetueren + "offene Tueren.");
	}
}