Buch Cover Buch Cover Buch Cover Buch Cover

Web-Code: - Webcode Help

Kokosnuss-Problem (Unterprogramme)

In einer stürmischen Sommernacht sind die drei Piraten Peter, Jack und William von ihrem Piratenschiff gespült wurden. Glücklicherweise konnten sie sich auf einer einsamen Insel retten.

Am nächsten Morgen stellen sie fest, dass es neben reichlich Trinkwasser auch jede Menge Kokosnüsse und eine paar friedliche Tiere auf der kleinen Insel gibt. 

Da sie nichts zu essen haben, sammeln sie den ganzen Tag lang einen großen Haufen Kokosnüsse und wollen diesen dann später gerecht aufteilen. Jedoch bricht die Dunkelheit früher als erwartet herein, die Müdigkeit macht sich längst breit und so wird die Teilung auf den nächsten Tag verschoben.

In der Nacht wacht Peter auf. Er traut den anderen beiden nicht über den Weg und möchte sich daher sein Drittel schon mal sichern. So zählt er die Kokosnüsse, teilt die gesamte Anzahl durch drei und versteckt seinen Anteil unweit der Quelle unter Laub und Sand. Bei seiner Rechnung ergibt sich ein Rest von einer Nuss, die er kurzerhand einem Affen spendiert und sich danach wieder beruhigt Schlafen legt.

Nur eine Stunde später erwacht Jack. Auch er will sich seinen Teil vorab sichern, schafft ein Drittel von den noch vorhandenen Nüssen zur Seite und gibt eine Nuss - die beim Teilen übrig bleibt - einem Affen. Anschließend geht auch er wieder schlafen.

Das gleiche Schauspiel vollzieht sich später in der Nacht ein drittes Mal. Auch William wird wach und abermals erhält ein Affe eine Nuss, da auch dieses Mal die Division nicht glatt aufgeht.

Tags darauf sagt aus Scham keiner der Piraten etwas über den arg geschrumpften Haufen und so wird nochmals durch drei geteilt. Wieder erhält ein Affe eine Nuss, da die Division nicht aufgeht.

Nun die Rätselfrage: Wie viele Kokosnüsse haben die drei Piraten Peter, Jack und William am Tag vorher mindestens gesammelt?

0 Kommentare

Bitte melde dich an um einen Kommentar abzugeben

5 Lösung(en)

public class Kokonusproblem {

    static boolean valid(int n, int nuesse) {
	for (int k = n; k != 0; k--, nuesse -= 1 + nuesse / n)
	    if (nuesse % n != 1)
		return false;
	return nuesse != 0 && (nuesse % n == 0);
    }

    public static void main(String[] args) {
	int x = 0;
	for (int n = 3; n < 10; n++) { // für 3 bis 9 Piraten
	    while (!valid(n, x))
		x++;
	    System.out.printf("%d: %d%n", n, x);
	}
    }
}

                

Lösung von: Houssein Fofana ()

function isMinumumHeap(num) {
  for (var i = 1; i <= 4; i++) {
    if (num % 3 != 1) return false;
    num -= (num - 1) / 3;
  }
  return true;
}

var coconuts = 1;
while (!isMinumumHeap(coconuts * 3 + 1)) coconuts++;
console.log(
  "Die Piraten hatten mindestens " + (--coconuts * 3 + 1) +
    " Kokosnüsse gesammelt."
);
/* Bleibt nur noch die frage: warum muss man kokosnüsse horten und eventuelle
|  anteile an dahergelaufene affen verfüttern, nur damit mitmenschen einen 
|  nicht übervorteilen können? Und das, obwohl noch viele kokosnüsse in hülle
|  und fülle vorhanden sind... Versteh einer die kapitalisten.
----------------------------------------------------------- lissalanda@gmx.at */
                

Lösung von: Lisa Salander (Heidi-Klum-Gymnasium Bottrop)

/**
 * 2016-08-04
 * @author Sam Yiming Miao
 */
package ch.toastgott.programmieraufgaben;

public class Kokusnussproblem {
	public static void main(String[] args) {
		int total_coconut = 0;
		int new_coconut = 0;
		int repetitions = 0;
		while (repetitions != 4) {
			if (new_coconut % 3 == 1) {
				new_coconut--;
				new_coconut -= new_coconut / 3;
				repetitions++;
			} else {
				total_coconut++;
				new_coconut = total_coconut;
				repetitions = 0;
			}
		}
		new_coconut /= 2;
		System.out.println("Damit die Geschichte logisch ist, müssen mindestens " + total_coconut + " Kokusnüsse vorhanden sein.");
		System.out.println("Nach der letzten Teilung erhält jeder Pirat " + new_coconut + " Kokusnüsse.");
	}
}
                

Lösung von: Sam Yiming Miao (Schule ist gut genug)

#include <iostream>
#include <stdlib.h>
#include <stdio.h>

using namespace std;

int wieVieleKokusnuse(int wieVieleSchon, int wieLangeNoch)
{
	if(wieLangeNoch > 0)
	{
		wieVieleSchon *= 3;
		wieVieleSchon++;
		wieLangeNoch--;
		wieVieleSchon = wieVieleKokusnuse(wieVieleSchon, wieLangeNoch);
	}
	return wieVieleSchon;
}

int main()
{
	int min = wieVieleKokusnuse(1, 4);
	cout << "Sie haben mindistens " << min << " Kokusnuese gesamelt" << endl;
	return 0;
}

                

Lösung von: Name nicht veröffentlicht

package coconut;

public class Coconut {
	public static void main (String[] argv) {
		int CocoCount = CoconutDilema(4, 3);
		System.out.println(CocoCount);
	}

	public static int CoconutDilema(int n, int div) {
		int sum = div+1; 
		for(int x=1; x < n; x++){
			sum = sum*div + 1;
		}
		return sum;
	}
	
	public static int CoconutDilema(int n) {
		return CoconutDilema(n, 3);
	}
}
                

Lösung von: Daniel Peters ()

Aktionen

Bewertung

Durchschnittliche Bewertung:

Eigene Bewertung:
Bitte zuerst anmelden

Meta

Zeit:
Schwierigkeit: k.A.
Webcode: hw5c-oehm
Autor: ()

Download PDF

Download ZIP

Zu Aufgabenblatt hinzufügen