C# :: Aufgabe #61 :: Lösung #4
4 Lösungen
#61
Austarieren (Mathematisches Problem)
Anfänger - C#
von bibir
- 03.09.2014 um 08:27 Uhr
Der folgenden Aufgabenstellung liegt das Problem des Austarierens zugrunde, wie man es z. B. bei einer Balkenwaage mit einer vorgegebenen Anzahl von Gewichten vorfindet.
Jede natürliche Zahl n lässt sich als Summe von Potenzen zur Basis 3 eindeutig darstellen.
Die Eindeutigkeit dieser Darstellung soll als gesichert vorausgesetzt werden.
Es ist ein Programm/Skript zu schreiben, das zu einer einzulesenden Zahl n <= 2000 den Wert m und die
Koeffizienten berechnet. Die Ausgabe soll wie im Beispiel angegeben erfolgen.
Hinweis: Das m ist gleich dem größten j, für das gilt: 3j < 2n.
Beispiel:
Für n = 46 erhält man m = 4.
Die Ausgabe sieht dann folgendermaßen aus:
n = 46
m = 4
46 =
+3**4
-3**3
-3**2
+3**0
Jede natürliche Zahl n lässt sich als Summe von Potenzen zur Basis 3 eindeutig darstellen.
Die Eindeutigkeit dieser Darstellung soll als gesichert vorausgesetzt werden.
Es ist ein Programm/Skript zu schreiben, das zu einer einzulesenden Zahl n <= 2000 den Wert m und die
Koeffizienten berechnet. Die Ausgabe soll wie im Beispiel angegeben erfolgen.
Hinweis: Das m ist gleich dem größten j, für das gilt: 3j < 2n.
Beispiel:
Für n = 46 erhält man m = 4.
Die Ausgabe sieht dann folgendermaßen aus:
n = 46
m = 4
46 =
+3**4
-3**3
-3**2
+3**0
#4
von kjaenke (1140 Punkte)
- 07.11.2017 um 08:19 Uhr
namespace Exercise_61
{
using System;
using System.Collections.Generic;
public static class Program
{
public static void Main()
{
List<int> koeffizientList = new List<int>();
Console.WriteLine("n: ");
var n = int.Parse(Console.ReadLine() ?? throw new InvalidOperationException());
if (n > 2000)
{
Console.Clear();
Console.WriteLine("Der Parameter n muss kleiner gleich 2000 sein.");
Main();
}
var x = n;
while (x > 1)
{
switch (x % 3)
{
case 0:
koeffizientList.Add(0);
break;
case 1:
koeffizientList.Add(1);
break;
case 2:
koeffizientList.Add(-1);
x++;
break;
default:
break;
}
x /= 3;
}
koeffizientList.Add(1);
Console.WriteLine("n = " + n);
Console.WriteLine("m = " + (koeffizientList.Count - 1));
Console.WriteLine(n + " =");
for (var i = koeffizientList.Count - 1; i >= 0; i--)
{
switch (koeffizientList[i])
{
case 1:
Console.WriteLine("+3**" + i);
break;
case -1:
Console.WriteLine("-3**" + i);
break;
default:
break;
}
}
Console.Read();
}
}
}
Kommentare:
Für diese Lösung gibt es noch keinen Kommentar
Seite 1 von 0
1
