Die 17 Studenten hatten zusammen mit dem Wirt ein größeres Mahl eingenommen und wollten sich vor der Zeche drücken. Also luden sie den Wirt zu einem Spiel ein, auf das dieser sich einließ. Dabei sollte nur einer die gesamte Zeche zahlen (einschließlich Wirt), und dieser sollte ausgelost werden, und zwar erhielt jeder "siebte" am Tisch ein "Freilos" und verließ den Raum. Gezählt wurde reihum nach folgendem Schema (der Wirt saß dabei an Position Nr.9): Der Student an Position Nr.1, der den Vorschlag gemacht hatte, fing an mit "eins", der Student an Position Nr.2 mit "zwei" usw., so dass der Student an Position Nr. 7 gehen durfte. Dann zählte der Student an Position Nr.8 wieder "eins", Der Wirt an Position Nr.9 zählte "zwei", der nächste Student an Position Nr.10 "drei" usw. Es ging reihum weiter, so dass nach dem Studenten an Position Nr.18 dann beim Studenten an Position Nr.1 weitergezählt wurde.
Es kam, wie es kommen musste: Der Wirt blieb über und damit auf seinen Kosten sitzen.
Wenn Ihr auch mal auf diese Weise die Zeche prellen wollt, hilft Euch Zechpreller 1.0. Es ist in C geschrieben (C99). Mit den #define's am Anfang könnt Ihr die Parameter vorher anpassen: Wieviele Personen seid Ihr, wo sitzt der Wirt, und wird bis 7 oder bis zu einer anderen Zahl gezählt?
Das Programm ist natürlich nicht berauschend geschrieben, aber es ist ja auch noch Version 1.0. Passt es für Eure Zwecke an, so könnte man z.B. die Parameter als Argumente in der Kommandozeile übergeben.
Vielleicht sind auch noch Fehler drin, aber das werdet Ihr ja merken!
Nun ja, in jedem Fall viel Spaß mit dem Programm.
Viele Grüße
Def
/* Zechpreller 1.0 (Juxprogramm) * This software is © 2008 by Def and subject to the following license: * * DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE * Version 2, December 2004 * * Copyright © 2004 Sam Hocevar * 14 rue de Plaisance, 75014 Paris, France * Everyone is permitted to copy and distribute verbatim or modified * copies of this license document, and changing it is allowed as long * as the name is changed. * * DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE * TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION * * 0. You just DO WHAT THE FUCK YOU WANT TO. * * --- * * getestet unter Linux (x86) mit gcc (GCC) 4.1.2 20070925 (Red Hat 4.1.2-33). * Benötigt für gcc die Option -std=c99 * Wenn man keinen C99-Compiler hat, einfach mal die Zeile * #include <stdbool.h> * entfernen und es als C++-Programm kompilieren, was auch gehen sollte. */ #include <stdbool.h> #include <stdio.h> #include <stdlib.h> #define ANFANGS_ANZAHL_PERSONEN 18 // einschliesslich Wirt #define WIRT 9 #define JEDER_WIEVIELTE 7 inline int gibAnzahlPersonen(const int *Tisch) { int Anzahl = 0; for(int i=1; i<=ANFANGS_ANZAHL_PERSONEN; i++) { if(Tisch[i] == true) ++Anzahl; } return Anzahl; } inline void zeigePersonen(const int *Tisch) { for(int i=1; i<=ANFANGS_ANZAHL_PERSONEN; i++) if(Tisch[i] == true) printf("%d ", i); putchar('\n'); } inline int inkrementierePersonenzaehler(int i) { if(i == ANFANGS_ANZAHL_PERSONEN) return 1; else return i+1; } int main(void) { int i; // Zaehler zum Durchsuchen des Arrays bzw. von 1 bis 7 zu zaehlen int j = 1; // Zaehler fuers Freilos, Nr.1 beginnt zu zaehlen int Tisch[ANFANGS_ANZAHL_PERSONEN + 1]; // +1 wg. der Nummerierung aus dem Buch for(i=1; i<=ANFANGS_ANZAHL_PERSONEN; i++) Tisch[i] = true; // Alle Personen am Tisch printf("Der geprellte Wirt\n"); printf("Der Wirt sitzt auf Position %d!\n\n", WIRT); // Freilose vergeben! while(gibAnzahlPersonen(Tisch)>1) // bis nur noch einer am Tisch sitzt { printf("%d Personen am Tisch!\n", gibAnzahlPersonen(Tisch)); zeigePersonen(Tisch); while(Tisch[j]==false) j = inkrementierePersonenzaehler(j); // leere Plaetze ignorieren for(i=1; i<JEDER_WIEVIELTE; i++) // von 1 bis 7 zaehlen { while(Tisch[inkrementierePersonenzaehler(j)]==fals e) j = inkrementierePersonenzaehler(j); // leere Plaetze ignorieren j = inkrementierePersonenzaehler(j); } Tisch[j] = false; printf("Nr. %d hat ein Freilos!\n", j); j = inkrementierePersonenzaehler(j); getchar(); } putchar('\n'); if(Tisch[WIRT] == true) printf("Es hat den Wirt erwischt!\n"); else { printf("Es hat den folgenden Gast erwischt: "); zeigePersonen(Tisch); } return EXIT_SUCCESS; }
Dieser Beitrag wurde von def bearbeitet: 08. März 2008 - 01:22
Änderungsgrund: Sorry, keine Buchzitate! :(