Zeichnen Sie einen ASCII-Baum mit geschachtelten for-Schleifen
Ich trainiere meine Programmierkenntnisse mit ein eher häufiges problem, das zeichnen von ASCII-Baum, bestehend aus einem Buchstaben (sagen wir x) auf einen Baum zeichnen.
Ie:
Prompt: Enter the number of lines for your tree: 5
Output:
x
xxx
xxxxx
xxxxxxx
x
Die Lösung habe ich derzeit arbeiten, wie ich es will. Ich bin nur fehlt eine Funktion (die ein Teil meiner Frage). Das Problem ist, ich verstehe nicht die for-Schleife Bedingungen die ich verwendet habe. Ja, ich habe Hilfe bekommen von einem anderen Menschen und ich verstehe immer noch nicht, Ihre Logik, aber es funktioniert. Bitte, bitte, bitte erklären Sie mir, wie die for-Schleife Bedingungen sind eigentlich für mich arbeiten, zu zeichnen, was ich will. x.x
Außerdem, ich bin nicht in der Lage zu ziehen die letzten "stumpf" des Baumes, das Letzte x in der letzten Zeile.
Hier ist mein code.
static void Main(string[] args)
{
int lines = 0;
Console.WriteLine("Enter number of lines: ");
string LinesAsString = Console.ReadLine();
lines = Convert.ToInt32(LinesAsString);
print(lines);
}
public static void print(int lines)
{
for (int i = 0; i < lines; i++)
{
for (int a = 0; a < lines-i-1; a++)
{
Console.Write(" ");
}
for (int y = 0; y < i*2 + 1; y++)
{
Console.Write("x");
}
Console.WriteLine();
}
}
Jede Hilfe ist willkommen.
Dank.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den ersten
for
Schleife druckt den padding auf der linken Seite (alle Räume). Der Ausdrucklines - i - 1
form kommt die Tatsache, dass Sie benötigen, um die Mitte der Struktur, und Sie wissen, dass die Linie0
hat ein Einzelzimmerx
-, Linien -1
3 (xxx
), Linie2
hat 5 (xxxxx
) und so weiter. Aber die Anzahl der Links-spaces hängt von der Anzahl der Zeilen der Baum hat deshalb Sie brauchen, um dielines
berücksichtigt, ebenso wie der index der aktuellen Zeile (die den Wert der Variableni
). Um herauszufinden, die Beziehung zwischen diesen beiden, Sie können nur versuchen, mit einer kleinen Anzahl von Ebenen, sagen wir mal 3:Zweiten
for
Schleife druckt denx
s. Er weiß, dass für die erste Zeile (i = 0
), müssen Sie zum drucken eines einzelnenx
, so dass, wenni
ist0
,y
werden muss1
daher die+ 1
. Die* 2
kommt aus der progressioni * 2 + 1 = {1, 3, 5, 7...}
ist die Anzahl derx
s in jeder Zeile.Drucken der letzten stub-Zeichen können Sie verwenden die gleiche Logik wie in der ersten
for
Schleife einfügen die Anzahl der Leerzeichen für die erste Zeile, gefolgt von einem einzigenx
.Diese sollte Hinzugefügt werden, nur nach der
for
Schleife enthält, die beiden anderen Schleifen.i
die angibt, welche Zeile gedruckt, um den output in jeder iteration derfor
umschließt, dass die beiden anderen. Gerade bearbeitet die Antwort, um zu klären, dass Punkt.Ist es ganz einfach:
Jeder iteration der ersten for-Schleife zeichnet eine Linie. Angenommen, Sie haben 4 Zeilen (ich bin nicht in Anbetracht der mit der einsamen x):
Linie 1 (i=0): 3 Räume, 1 x
Linie 2 (i=1): 2 Räume 3 x
Linie 3 (i=2): 1-Räume 5 x
Zeile 4 (i=3): 0 Räume 7 x
Von diesen, können Sie eine Beziehung zwischen der Anzahl der Räume, x, dem Zeilenindex i und die Anzahl der Zeilen.
Die erste Schlaufe ziehen, den Raum und die zweite die x