Anstoßende Partygäste (Schleifen)
Es handelt sich hier nicht um anstößige Partygäste. Vielmehr geht es darum, dass die Personen an einer Party mit ihren Gläsern anstoßen.
Die Aufgabe, wie oft die Gläser klingen, wenn jeder mit jedem anstößt, ist bekannt. Es handelt sich um die Formel von Gauß und bei n Personen wird n*(n-1)/2 mal angestoßen.
Doch diese Party ist anders.
Nach und nach betreten die 20 Gäste den Ballsaal. Einer nach dem anderen. Leider vergeht von Gast zu Gast so viel Zeit, dass alle Anwesenden bereits wieder ausgetrunken haben. Doch von vorne:
Nachdem der zweite Gast der Raum betritt, stoßen die beiden Personen an und beginnen zu plaudern. Nach einiger Zeit haben sie ausgetrunken und ein dritter Gast betritt den Ballsaal. Nun schenken sich alle ein Getränk ein und alle drei stoßen miteinaner an.
Sobald der 4. Gast den Raum betritt, schenken sich sofort alle wieder ihr Glas voll; alle vier Personen stoßen nun miteinander an
Wie viel mal klingelten die Gläser an diesem Abend, wenn insgesammt 20 Gäste anwesend waren? Oder darf man hier sagen "hineintröpfelten"?
Programmieren Sie das Resultat so, dass der Anwender die Anzahl aller Gäste frei wählen kann, und Ihr Programm soll danach ausgeben, wie oft die Gläser geklungen hatten.
0 Kommentare
16 Lösung(en)
- c
- java
- generic
- pascal
- csharp
- generic
- java
- javascript
- python
- vb
- csharp
- javascript
- generic
- python
- csharp
- csharp
#include <stdio.h>
int klaenge(int personen) {
if(personen < 2) return 0;
int klg = 0;
for(int i = 2; i <= personen; i++) {
klg = klg + i*(i-1)/2;
}
return klg;
}
void main() {
int personen;
printf("Geben Sie die Anzahl Personen ein:");
scanf("%d", &personen);
int kl = klaenge(personen);
printf("Es hat %d mal geklungen.\n", kl);
}
Lösung von: Philipp G. Freimann (BBW (Berufsbildungsschule Winterthur) https://www.bbw.ch)
import java.util.InputMismatchException;
import java.util.Scanner;
public class Main {
private int amount;
public static void main(String[] args) {
new Main().init();
}
private void init() {
readAmount();
calc();
}
private void readAmount() {
try {
System.out.print("Anzahl der Partygäste: ");
Scanner input = new Scanner(System.in);
amount = input.nextInt();
} catch (InputMismatchException e) {
System.out.println("Bitte geben Sie eine Zahl an.");
System.out.println();
readAmount();
}
}
private void calc() {
int result = 0;
for(int i = 2; i <= amount; i++) {
result += 0.5 * i * (i - 1);
}
System.out.println("Anzahl der Klänge: " + result);
}
}
Lösung von: Name nicht veröffentlicht
// geschrieben in GO (GOLANG) Ver. 1.9.2
package main
import "fmt"
func main() {
var n, k, t int
fmt.Print("Wieviele Gäste erwarten Sie?:")
fmt.Scan(&n)
for i := 0; i < n; i++ {
k += i
for j := 0; j < i; j++ {
t += j
}
}
fmt.Println("Es klingeln", (k + t), "mal die Gläser. Prost!")
}
/*
INFO: Zu testen bei The Golang Playground
URL: https://play.golang.org/
Personen: Klingeln: SummeKlingeln:
1 0 0
2 1 1
3 3 4
4 6 10
5 10 20
... ... ...
20 190 1330
*/
Lösung von: Name nicht veröffentlicht
program klingendeGlaeser (input, output);
var
Gaeste: integer;
klingeln: integer;
i: integer;
begin
writeln ('Bitte gebe die Anzahl von Gaesten ein');
readln (Gaeste);
i:= 2;
klingeln:= 0;
while i <= Gaeste do
begin
Klingeln:= Klingeln + i*(i-1)div 2 ;
i:= i+1;
end;
writeln ('Es wird ', klingeln ,' mal angestoßen')
end.
Lösung von: Name nicht veröffentlicht
static void Main(string[] args)
{
var x = 0;
Console.WriteLine("Wählen Sie eine Zahl:");
var y = Convert.ToInt32(Console.ReadLine());
var i = 1;
while (i <= y)
{
x += i * (i - 1) / 2;
i++;
}
Console.Write(x);
}
Lösung von: Irene Strauß (Liceo Scientifico, Bruneck)
''24.02.2018 - Powerbasic 10
#COMPILE EXE
#DIM ALL
FUNCTION PBMAIN () AS LONG
DIM x AS STRING
DIM t AS LONG
DIM i AS LONG
x = INPUTBOX$("Wieviele Partygäste?","Anstossende Partygäste","20")
IF x = "" THEN EXIT FUNCTION
FOR i = 1 TO VAL(x)
t += i*(i-1)/2
NEXT i
MSGBOX "Es hat " & FORMAT$(t) & " mal 'kling' gemacht.",, EXE.NAME$
END FUNCTION
Lösung von: Markus Sägesser (keine)
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package gläser;
import java.util.*;
/**
*
* @author SuReLLi
*/
public class Gläser {
public static int klingel;
public static int total;
public static int gäste;
public static int anstoßen(){
klingel = (gäste*(gäste-1)/2);
total = total + klingel;
return klingel;
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
int fail = 1;
Scanner scanner = new Scanner(System.in);
int runden = 0;
System.out.println("Wie viele Gäste erscheinen zur Party?");
while(fail==1){
try{
runden = scanner.nextInt();
fail=0;
}
catch(NumberFormatException x){
fail=1;
}
}
int arunde = 0;
gäste = 1;
while(arunde < runden){
System.out.println("Der "+(arunde+1)+". Gast ist eingetroffen.");
if(arunde > 0){
System.out.println("Die Partygäste stoßen an");
anstoßen();
}
System.out.println("Es wurde insgesamt "+total+" mal angestoßen");
arunde++;
gäste++;
}
}
}
Lösung von: Name nicht veröffentlicht
<!DOCTYPE html>
<html>
<head>
<style>
span, input, label {display: inline-block;}
</style>
<script>
const getCheersCount = (guests) => isNaN(parseInt(guests)) || parseInt(guests) <= 0 ? 0 : Array
.apply(null, new Array(parseInt(guests)))
.map((guest, index) => index + 1)
.reduce((acc, n) => acc + (n*(n-1)) / 2, 0);
const updateResult = () => {
const guests = document.getElementById("input").value;
document.getElementById("result").innerHTML = getCheersCount(guests);
};
</script>
</head>
<body>
<label for="input">Number of guests:</label>
<input title="numberOfGuests"
placeholder="Number of guests ..."
id="input"
onkeydown="updateResult()"
oninput="updateResult()" />
Result: <span id="result"></span>
</body>
</html>
Lösung von: Christian :) (Hochschule Merseburg)
anzahlGaeste = int(input("Geben Sie die Anzahl an Gaesten ein, welche eintrudeln sollen: "))
count = 0
for i in range(2, anzahlGaeste+1):
count += i*(i-1)//2
print (count)
Lösung von: Tim Rieder (KSWE)
Sub Main()
Console.WriteLine("Geben Sie die Anzahl an Gästen ein: ")
Dim gaeste As Integer = Console.ReadLine()
Dim klingen As Integer = 0
For i As Integer = 1 To gaeste Step 1
If i >= 2 Then
klingen += i * (i - 1) / 2
End If
Next
Console.WriteLine(klingen)
Console.ReadLine()
End Sub
Lösung von: Elias Zech (Optics Balzers)
class Program
{
static void Main(string[] args)
{
Console.Write("Anzahl Gäste: ");
int gaeste = Convert.ToInt32(Console.ReadLine());
int stoß = 0;
for (int i = 2; i < gaeste + 1; i++)
{
stoß += i * (i - 1) / 2;
}
Console.WriteLine("Anzahl Anstoßen: {0}", stoß);
Console.ReadLine();
}
}
Lösung von: Till Söffgen ()
var ergebnis = 0;
var gaeste = prompt("Wie viel Gäste haben die Party besucht?");
for(i = 2; i <= gaeste; i++) {
ergebnis = ergebnis + i*(i-1)/2;
};
alert("Es wurde " + ergebnis + " angestoßen!");
Lösung von: Name nicht veröffentlicht
package main
import (
"fmt"
"os"
"strconv"
)
func printUsage() {
fmt.Println("./number_of_cheers <number of attendees>")
}
func main() {
args := os.Args[1:]
if len(args) != 1 {
printUsage()
os.Exit(1)
}
attendees, error := strconv.Atoi(args[0])
if error != nil || attendees < 0 {
printUsage()
os.Exit(1)
}
var cheers int
for i := 2; i <= attendees; i++ {
cheers += i * (i - 1) /2
}
fmt.Println(cheers)
os.Exit(0)
}
Lösung von: Name nicht veröffentlicht
#!/usr/bin/python3.6
def ding(people_count):
return people_count*(people_count - 1) / 2
print('bitte Anzahl der Personen eingeben:')
people_count = int(input())
ding_count = 0
for i in range(0,people_count+1):
ding_count += ding(i)
print('DING! ' + str(ding_count))
Lösung von: Name nicht veröffentlicht
using System;
using System.Collections.Generic;
namespace Spindknacker
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Bitte Gästeanzahl angeben");
int guest = int.Parse(Console.ReadLine());
int klirr = 0;
for(int i = 0; i <= guest; i++)
{
klirr += i*(i - 1 )/2;
}
Console.WriteLine("Die Gäste haben "+klirr+" mal angestoßen");
}
}
}
Lösung von: Name nicht veröffentlicht
// NET Core 3.x; C# 8.x
using System;
using System.Linq;
namespace CS_Aufgabe_PartyGaeste
{
class Program
{
static void Main(string[] args)
{
Console.Write("Anzahl Gäste: ");
int.TryParse(Console.ReadLine(), out var c);
Console.WriteLine($"Anzahl der Klänge: {Enumerable.Range(1, c).Select(x => x * (x - 1) / 2).Sum()}");
}
}
}
Lösung von: Jens Kelm (@JKooP)
Verifikation/Checksumme:
Bei 20 Gästen klingelten die Gläser 1330 Mal.
Aktionen
Neue Lösung hinzufügen
Bewertung
Durchschnittliche Bewertung:
Meta
Zeit: | 0.25 |
Schwierigkeit: | Mittel |
Webcode: | b2jr-q8pb |
Autor: | Philipp G. Freimann (BBW (Berufsbildungsschule Winterthur) https://www.bbw.ch) |