Floyd's Triangle

Impressum / Imprint

Erklärung

Das Floyd's Dreieck ist ein Dreieck aus Zahlen, von 1 bis X, und ist N Zeilen hoch.
In Zeile Y sind Y Zahlen: In Zeile 1 ist 1 Zahl; In Zeile 2 sind 2 Zahlen; In Zeile 3 sind 3 Zahlen ...

Beispiele

Ein Beispiel für ein Dreieck: Es gilt N = 1 :

1
				

Ein Beispiel für ein Dreieck: Es gilt N = 2 :

1
2 3
				

Ein Beispiel für ein Dreieck: Es gilt N = 3 :

1
2 3
4 5 6
				

Ein Beispiel für ein Dreieck: Es gilt N = 4 :

1
2 3
4 5 6
7 8 9 10
				

Ein Beispiel für ein Dreieck: Es gilt N = 5 :

1
2 3
4 5 6
7 8 9 10
11 12 13 14 15
				

Ein Beispiel für ein Dreieck: Es gilt N = 6 :

1
2 3
4 5 6
7 8 9 10
11 12 13 14 15
16 17 18 19 20 21
				

Knobelaufgabe

Gib eine Formel an, mit der die letzte Zahl, damit die Anzahl der Zahlen, X, berechnet werden kann.
Gegeben ist nur N.

Beispiel

Wenn N = 4 dann ist X = 10 .

Lösung

Das Dreieck ähnelt sehr einer Dreiecks Form.
Vielleicht lässt sich X wie der Flächeninhalt eines Dreiecks berechnen?!
N * N 2 = X
((N*N)/2=X)

Versuchen wir es:
4 * 4 2 = 8
((4*4)/2)

Das geht nicht! Schade!

Aber N * N = N 2 (N*N=N^2) ist ein guter Ansatz.
Also N 2 (N^2) subtrakiert mit U(Unbekannt) ergibt X:
N 2 - U = X
(N^2-U=X)

Was ist U?
Bei N=1 ist U=0
Bei N=2 ist U=1
Bei N=3 ist U=3
Bei N=4 ist U=6
Bei N=5 ist U=10
Bei N=6 ist U=15
Es ist nur N gegeben, dass heizt aus N muss irgentwie 0, 1, 3, 6 usw. werden.

Mit welcher Zahl muss N multipliziert werden damit aus N, U wird?
Bei N=1 ist U=N*0=0
Bei N=2 ist U=N*0.5=1
Bei N=3 ist U=N*1=3
Bei N=4 ist U=N*1.5=6
Bei N=5 ist U=N*2=10
Bei N=6 ist U=N*2.5=15
Man sieht ein Muster 0, 0.5, 1, 1.5 usw. Die Zahlen werden immer um 0.5 Erhöht.
Die Formel für diese Reihenfolge ist:
0.5 * ( N - 1 ) = 0.5 * N - 0.5
(0.5*(N-1)=0.5*N-0.5)

Das für U eingesetzt ergibt:
N 2 - ( 0.5 * N - 0.5 ) = X
(N^2-(0.5*N-0.5)=X)
Das Verkürtzt:
0.5 * N 2 + 0.5 * N = X
(0.5*N^2+0.5*N=X)
Dies kann man auch als Division dastellen, denn 0.5 * X = X 2 (0.5*X=X/2) :
N 2 2 + N 2 = X
(N^2/2+N/2=X)

Damit wäre die Lösung:
N 2 2 + N 2 = X
(N^2/2+N/2=X)

Implementierung in C

floydtri_c.c

#include <stdio.h>  /* printf, scanf */

int main()
{
    int n;

    printf("Please enter a number: ");
    scanf("%d", &n);
    printf("\nFloyd's triangle:\n");

    register int i, j, num;

    for(i = 1, num = 1; i <= n; i++)
    {
        for(j = 0; j < i; j++, num++)
            printf("%d ", num);

        printf("\n");
    }

    return 0;
}

Implementierung in C++

floydtri_cpp.cpp

#include <iostream>  /* std::cout, std::cin, std::endl */

using std::cout;
using std::cin;
using std::endl;

int main()
{
    int n;

    cout << "Please enter a number: ";
    cin >> n;
    cout << endl << "Floyd's triangle:" << endl;

    int j;

    for(int i = 1, num = 1; i <= n; i++)
    {
        for(j = 0; j < i; j++, num++)
            cout << num << " ";

        cout << endl;
    }
    return 0;
}

Implementierung in Java

floydtri_java.java

package floytri_java;

import java.util.Scanner;

public class floytri_java {

    public static void main(String[] args) {
        System.out.print("Please enter a number: ");
        Scanner s = new Scanner(System.in);
        int n = s.nextInt();
        s.close();
        
        System.out.println("\nFloyd's triangle:");
        
        int j;
        
        for(int i = 1, num = 1; i <= n; i++)
        {
            for(j = 0; j < i; j++, num++)
                System.out.print(num + " ");
            
            System.out.println("");
        }
    }

}

Implementierung in Ruby

floydtri_ruby.rb

print "Please enter a number: "
n = gets.to_i
puts "\nFloyd's triangle:"

num = 1

for i in 1..n
  for j in 0...i
    print "#{num} "
    num += 1
  end
  puts
end