Kamis, 05 Januari 2012

#include <iostream>
#include <cstdlib>
using namespace std;

/*
Soal:
Diberikan input N (N >= 3), buat N-1 buah segitiga sama sisi dengan panjang sisi = N. Segitiga ke-2, ke-3, dst 
diletakkan sedemikian rupa sehingga gabungan salah satu sisi dari semua segitiga yang ada membentuk garis lurus.

Contoh input:
N = 3

Contoh output:
  *
 * *
* * *
     *
    * *
   * * *

Algoritma:
Tampilkan N-1 buah segitiga di mana segitiga ke-k (k = 1, 2, 3, ..., N-1) memiliki jarak ((k - 1) * N) spasi dari kiri.
Segitiga dibentuk dengan karakter spasi dan bintang. Baris ke-i (i = 1, 2, 3, ..., N) dalam sebuah segitiga berisi 
(N - i) spasi yang diikuti i buah bintang. Antara bintang yang satu dengan bintang yang lainnya, dipisahkan oleh 1 spasi.
*/

int main()
{
    int N; cout << "N = "; cin >> N;
    if (N >= 3)
    {
        for (int k = 1; k <= (N - 1); k++) {
            for (int i = 1; i <= N; i++) {
                int kiri = (k - 1) * N; // jarak segitiga ke-k dari kiri (k = 1, 2, 3, ..., N-1)
                for (int j = 1; j <= kiri; j++) {
                    cout << " ";
                }
                
                int spasi = N - i; // spasi sebelum bintang pertama pada baris ke-i dalam segitiga (i = 1, 2, 3, ..., N)
                for (int j = 1; j <= spasi; j++) {
                    cout << " ";
                }
                
                // bintang pada baris ke-i dalam segitiga (i = 1, 2, 3, ..., N) berikut 1 spasi
                for (int j = 1; j <= i; j++) {
                    cout << "* ";
                }
                cout << endl;
            }
        }
    }
    else
    {
        cout << "N harus >= 3!" << endl;
    }
    
    cout << endl;
    system("pause");
}