C# :: Aufgabe #61 :: Lösung #1

4 Lösungen Lösungen öffentlich
#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
#1
vote_ok
von eulerscheZhl (5230 Punkte) - 21.11.2014 um 14:02 Uhr
Quellcode ausblenden C#-Code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;

namespace Rextester
{
    public class Program
    {
        public static void Main(string[] args)
        {
            List<int> coeffs = new List<int>();
            Console.WriteLine("n: ");
            int n = int.Parse(Console.ReadLine());
            int tmp = n;
            while (tmp > 1) {
                switch (tmp % 3) {
                    case 0: coeffs.Add(0); break;
                    case 1: coeffs.Add(1); break;
                    case 2: coeffs.Add(-1); tmp++; break;
                }
                tmp /= 3;
            }
            coeffs.Add(1);
            
            Console.WriteLine("n = " + n);
            Console.WriteLine("m = " + (coeffs.Count - 1));
            Console.WriteLine(n + " =");
            for (int i = coeffs.Count - 1; i >= 0; i--)
            {
                if (coeffs[i] == 1)
                    Console.WriteLine("+3**" + i);
                else if (coeffs[i] == -1)
                    Console.WriteLine("-3**" + i);
            }
        }
    }
}

Kommentare:

Für diese Lösung gibt es noch keinen Kommentar

Bitte melden Sie sich an um eine Kommentar zu schreiben.
Kommentar schreiben
1800781

Du scheinst einen AdBlocker zu nutzen. Ich würde mich freuen, wenn du ihn auf dieser Seite deaktivierst und dich davon überzeugst, dass die Werbung hier nicht störend ist.