C# :: Aufgabe #226 :: Lösung #3

3 Lösungen Lösungen öffentlich
#226

Digitbegrenztes Zählen

Anfänger - C# von hollst - 31.08.2018 um 11:04 Uhr
Gegeben sei ein positives Integerarray (uint) AMAX der Länge N, das mit Zufallszahlen zwischen (inclusive) 1 und einer Konstanten amax gefüllt ist.
Die Feldbelegung von AMAX stellt obere Wertgrenzen dar.

Man schreibe ein Programm, das alle möglichen Belegungen eines positives Integerarrays A (Länge N) auflistet,
wobei die Feldwerte von A entsprechend der Grenzwertbelegung von AMAX stets unterschritten werden müssen.

Beispiel (c#):
Quellcode ausblenden C#-Code
int N = 5, amax = 11; uint[] AMAX = new uint[] {3, 2, 9, 1, 4}
 
//mögliche uint[] A sind:
new uint[] {0, 0, 0, 0, 0}
new uint[] {1, 0, 0, 0, 0}
new uint[] {2, 0, 0, 0, 0}
new uint[] {0, 1, 0, 0, 0}
new uint[] {1, 1, 0, 0, 0}
new uint[] {2, 1, 0, 0, 0}
new uint[] {0, 0, 1, 0, 0}
// ...
// ...
new uint[] {2, 1, 8, 0, 3}
#3
vote_ok
von hollst (10530 Punkte) - 22.02.2019 um 10:03 Uhr
Quellcode ausblenden C#-Code
using System;
using static System.Console;
using System.Collections.Generic;

namespace Aufgabe_226
{
    static class Program
    {
        static void Main()
        {
            uint[] AMAX = new uint[] { 3, 2, 9, 1, 4};
            List<uint[]> A = AMAX.AllNumbers();
            WriteLine($"AllNumbers_TEST(): {A.Count}");
            for(var i = 0; i < A.Count; i++)
            {
                Write($"{i,4}: ");
                for(var j = 0; j < A[i].Length; j++)
                    Write($"{A[i][j],2} ");
                WriteLine();
            }            
            ReadKey();
        }

        public static List<uint[]> AllNumbers(this uint[] AMAX)
        {
            List<uint[]> result = new List<uint[]>();
            uint maxn = 1;
            for (var i = 0; i < AMAX.Length; i++)
                maxn *= AMAX[i];

            uint[] A = new uint[AMAX.Length];
            
            for(var i = 0; i < maxn; i++)
            {
                uint[] AA = new uint[AMAX.Length];
                A.CopyTo(AA, 0);
                result.Add(AA);

                for (var j = 0; j < AMAX.Length; j++)
                    if(A[j] < AMAX[j] - 1)
                    {
                        A[j]++; break;
                    }
                    else
                        A[j] = 0;                                                
            }
            return result;
        }
    }
}

Kommentare:

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

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