Soal 7/8
Tugas AO Computer Science
Dari delapan soal yang diberikan, semuanya meminta kita untuk mencetak output angka atau karakter lainnya dengan susunan/pola menyerupai bangun datar.
Soal Pengenalan Algoritma dan Pemrograman #7
Format masukan berupa sebuah bilangan N.
Format keluaran berupa N baris dengan pola sesuai gambar di bawah.
Berikut ini salah satu solusi untuk soal di atas :
#include <stdio.h> #include <string.h> int memo[10000]; int fib(int x){ if(memo[x] != -1) return memo[x]; return memo[x] = fib(x - 1) + fib(x - 2); } int main(){ int N; memset(memo, -1, sizeof(memo)); memo[0] = memo[1] = 1; scanf("%d", &N); for(int a = 1; a <= N; a++){ for(int b = 0; b < a; b++) printf("%-4d", fib(b)); printf("\n"); } }
Penjelasan :
Sebelum masuk ke fungsi main, fungsi fib(int x) merupakan fungsi untuk mengeluarkan nilai fibonacci ke-x. Dalam fungsi fibonacci di atas menggunakan array memo karena fungsi rekursifnya cukup boros (memanggil dengan parameter sama berulang-ulang).
Saya juga akan menyertakan versi non-rekursif dari solusi soal ini.
Pada for-loop di baris 17 dan 18, yang berindeks a merupakan wakil dari banyaknya baris (N buah baris) dan yang berindeks b merupakan wakil dari banyaknya bilangan fibonacci yang dicetak untuk setiap baris ke-a (a buah bilangan fibonacci).
Berikut ini versi lain dari solusi di atas (versi non-rekursif) :
#include <stdio.h> int main(){ int N; int x; int y; int z; scanf("%d", &N); for(int a = 0; a < N; a++){ x = 0; y = 0; z = 1; for(int b =0; b <= a; b++){ printf("%-3d", z); x = y; y = z; z = x + y; } printf("\n"); } }