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