Soal Pengenalan Algoritma dan Pemrograman (7)

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.

7

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 merupakan wakil dari banyaknya baris (buah baris) dan yang berindeks merupakan wakil dari banyaknya bilangan fibonacci yang dicetak untuk setiap baris ke-(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");
	}
}

Leave a Reply

Your email address will not be published. Required fields are marked *