C :: Aufgabe #243

3 Lösungen Lösungen öffentlich

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

Anfänger - C 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 kamikatze (420 Punkte) - 14.02.2020 um 11:51 Uhr
Quellcode ausblenden C-Code
#include <stdio.h>
#include <stdbool.h>


int main(){

    bool tuer [100];     

    // init tür == 0
    for(int i = 0; i < 100; i++){
        tuer[i] = false;
    }

//###################################################################
    // türen durchlaufen
    for(int i = 2; i < 100; i++){                   // tür änderungs druchlauf, jede X'te tü wird geöffnet/ geschlossen
        for(int k = 0; k < 100; k++){               // durchlaufen der türen
            if(((k + 1) % i) == 0) {                // +1 -> um index 0 zu kompensieren, wenn tür nummer  == i, dann umdrehen - sonst ignorieren
                //türenzustand drehen
                if (tuer[k] == true){
                    tuer[k] = false;}                 
                    else
                    {
                        tuer[k] = true;
                    }
                    
                }
            }                    
        for(int l = 0; l < 100; l++){               // print aktuellen durchlauf
            printf("%d", tuer[l]);
        }
        printf("\n");
        }
//###################################################################

    // zählen der offnenen türen
    int anzahl = 0;
    for(int l = 0; l < 100; l++){
        if(tuer[l] == true){
            anzahl++;
        }
    }
    printf("anzahl offener türen: %d\n",anzahl );
}
vote_ok
von Waldgeist (2310 Punkte) - 24.02.2020 um 19:45 Uhr
Halo,

hier meine Lösung als C Programm.

Quellcode ausblenden C-Code

#include <stdio.h>

int main()
{
    printf("Programm zur Ermittlung wieviele Tueren offen stehen.\n\n");

    bool Zellen[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++;
    }

    printf("Anzahl offener Tueren: %d", Anzahl);
   

    return 0;
}

vote_ok
von kathleenw (3600 Punkte) - 30.06.2020 um 10:24 Uhr
Quellcode ausblenden C-Code
#include <stdio.h>
#include <stdbool.h>

int main(void)
{
    int i,j,k;
       
    //Array deklarieren
    bool tueren[100];
    k=0;
    
    //Alle Türen sind zu
    for (i=0;i<100;i++) {
        tueren[i] = false;
    }
    
    
    for (j=0;j<100;j++) {
        for (i=0;i<100;i=i+j+1) {
            if (tueren[i]==false)
                tueren[i]=true;
            else
                tueren[i]=false;
        }
    }
    
    for (i=0;i<100;i++) {
        if (tueren[i] == true)
            k=k+1;
    }
    
    printf("Es sind %d Türen offen.", k);
}