C# :: Aufgabe #358

4 Lösungen Lösungen öffentlich

Divisionsrest (Modulo) aus einer Zahl und ihrer Ziffern

Anfänger - C# von JKooP - 11.02.2021 um 19:17 Uhr
Ziel soll es sein, eine beliebige Integer-Zahl dahingehend zu überprüfen,
ob die Zahl dividiert durch jede ihrer Ziffern immer den Rest 0 ergibt (Modulo = mod).

Dazu soll eine Methode/Funktion erstellt werden, die zwei Integer-Zahlen (Min, Max) aufnimmt
und alle Lösungen im angegebenen Bereich (Min-Max) als Integer-Array zurückgibt.

Beispiel:

Min = 1
Max = 20
Lösung: = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 15 ]

Erläuterung (Auszug):

Zahl 9: 9 mod 9 = 0 => true (gilt für jede einstellige Zahl)
Zahl 10: 10 mod 1 = 0; 10 mod 0 = 10 => false, da nicht beide den Rest 0 haben
Zahl 12: 12 mod 1 = 0; 12 mod 2 = 0 => true
Zahl 14: 14 mod 1 = 0; 14 mod 4 = 2 => false, da nicht beide den Rest 0 haben

Viel Spaß

Lösungen:

vote_ok
von hollst (13340 Punkte) - 14.02.2021 um 16:59 Uhr
Quellcode ausblenden C#-Code
using static System.Console;    //.net 5.0.2 VS Community 2019

int imin = 1, imax = 301;
WriteLine(aufgabe_358(imin, imax).ToMyString());
ReadKey();

//------------------------------------------------------------------------------
int[] aufgabe_358(int imin, int imax)   {
    var temp = new System.Collections.Generic.List<int>();
    for (var i = imin; i <= imax; i++)    {
        var ii = i;    var bo = true;
        do    {
            var mo = ii % 10;
            if (Mod(i, mo) != 0)
                bo = false;
            ii /= 10;
        }    while (ii != 0);
        if (bo)
            temp.Add(i);
    }
    return temp.ToArray();
}

int Mod(int z1, int z2) => z2 != 0 ? z1 % z2 : z1;

static class Extension    {
    public static string ToMyString(this int[] X)    {
        var sb = new System.Text.StringBuilder();
        foreach (int x in X)
            sb.Append($"{x} ");
        return sb.ToString();
    }
}
vote_ok
von dany_mue (240 Punkte) - 17.02.2021 um 20:47 Uhr
Quellcode ausblenden C#-Code
using System;
using System.Collections.Generic;

namespace TJP358_Divisionsrest
{
	class Program
	{
		/// <summary>
		/// Main
		/// </summary>
		static void Main(string[] args)
		{
			// Prüfung
			var arrayValues = Calculate(1, 100);

			// Ausgabe
			foreach (var item in arrayValues)
			{
				Console.WriteLine(item);
			}
		}

		/// <summary>
		/// Prüfen der Zahlenwerte
		/// </summary>
		private static int[] Calculate(int min, int max)
		{
			List<int> listResults = new List<int>();

			// alle Zahlenwerte prüfen
			for (int j = min; j <= max; j++)
			{
				string value = j.ToString();
				List<int> listDigits = new List<int>();
				
				// Ziffern der Zahl ermitteln
				for (int i = 0; i < value.Length; i++)
				{
					if (int.TryParse(value[i].ToString(), out int result))
						listDigits.Add(result);
				}

				// Zahl überprüfen 
				// ok = true wenn Zahl % Ziffer = 0
				bool ok = true;
				foreach (var digit in listDigits)
				{
					if (digit == 0 || (j % digit) != 0)
						ok = false;						
				}
				
				if (ok)
					listResults.Add(j);
			}			
			return listResults.ToArray();
		}
	}
}

vote_ok
von Frank (410 Punkte) - 22.02.2021 um 21:23 Uhr
Quellcode ausblenden C#-Code
using System;
using System.Text;

namespace DivisionstestModulo
{
    class Program
    {
        static void Main(string[] args)
        {
            int minValue = 1;
            int maxValue = 20;

            StringBuilder sb = new StringBuilder();

            for (int i = minValue; i <= maxValue; i++)
            {
                bool isModuloZero = false;
                char[] digits = i.ToString().ToCharArray();

                foreach (char diget in digits)
                {
                    double nDiget = Char.GetNumericValue(diget);
                    if (nDiget == 0)
                    {
                        isModuloZero = false;
                        break;
                    }
                    double diff = i / nDiget;
                    double rest = diff - Math.Truncate(diff);
                    if (rest == 0)
                        isModuloZero = true;
                    else
                    {
                        isModuloZero = false;
                        break;
                    }
                }
                if (isModuloZero)
                    sb.Append($"{i}, ");
            }
            Console.WriteLine(sb);
        }
    }
}
vote_ok
von JKooP (11680 Punkte) - 05.03.2021 um 15:44 Uhr
NET 5.x; C# 9.x; VS-2019

Quellcode ausblenden C#-Code
using System.Collections.Generic;
using System.Linq;

const int min = 1, max = 100;
System.Console.WriteLine(string.Join(", ", SelfDividingNumbers(min, max)));

IEnumerable<int> SelfDividingNumbers(int min, int max)
{
    foreach (var l in Enumerable.Range(min, max - min + 1))
        if (l.ToString().All(x => l % char.GetNumericValue(x) == 0))
            yield return l;
}