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");
}
}
