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

8 Lösungen Lösungen öffentlich
#12

Zahlenfolge berechnen und fortsetzen

Anfänger - C# von pocki - 24.11.2012 um 19:50 Uhr
Es soll eine Zahlenfolge wiefolgt berechnet werden:
Die nacheinander folgenden gleichen Zahlen werden gezählt und zusammen mit der Zahl ausgegeben.
Aus der neu berechneten Zahlenfolge errechnet sich die nächste.

Beispiel:
1. Folge: 112
2. Folge: 2112 (2 Einser und 1 Zweier)
3. Folge: 122112 (1 Zweier, 2 Einser, und 1 Zweier)
usw.

Es soll nun mit dieser ersten Folge startend die 15. Folge berechnet und ausgegeben werden.
Wenn mehrstellige Zahlen vorkommen sind diese gleich auszugeben. Bsp: 12 Einser = 121
#1
vote_ok
von pocki (4190 Punkte) - 24.11.2012 um 21:02 Uhr
Hier ist meine Lösung:
Startfolge und Anzahl der Folgen kann einfach geändert werden.
Quellcode ausblenden C#-Code
using System;
using System.Collections.Generic;
using System.Linq;

namespace UE12
{
	class Program
	{
		private static void Main()
		{
			const string first = "112";
			const int sequences = 15;
			List<string> rows = new List<string> { first };

			Console.WriteLine("Die Startfolge lautet: {0}", first);

			for (int i = 0; i < sequences; i++)
			{
				string s = CalculateRow(rows[i]);
				rows.Add(s);
			}

			Console.WriteLine("Die {0}. Folge lautet: {1}", sequences, rows[sequences-1]);
			Console.ReadKey();
		}

		/// <summary>
		/// Berechnet eine neue Folge aus der übergebenen.
		/// </summary>
		/// <param name="row">Ausgangsfolge</param>
		/// <returns>neu berechnete Folge</returns>
		private static string CalculateRow(string row)
		{
			string newRow = string.Empty;

			//Folge in integer Liste zerlegen
			IEnumerable<int> numbers = row.ToCharArray().Select(x => int.Parse(x.ToString()));

			int last = numbers.First();
			int count = 0;

			//Jede Zahl wird mit vorheriger verglichen.
			foreach (var number in numbers)
			{
				if (number == last)
				{
					count++;
				}
				else
				{
					//bei Unterschied werden Werte zur neuen Folge hinzugefügt
					newRow += count.ToString() + last.ToString();
					last = number;
					count = 1;
				}
			}
			newRow += count.ToString() + last.ToString();

			return newRow;
		}
	}
}

Kommentare:

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

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

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.