Anda di halaman 1dari 6

Nama : Nouvelli Cornelia

NRP : 05111940000011

Tugas 3 Kelas
Tenggat 29 Maret 2021

1. SPOJ – MONONUM

Soal :

Accepted Submission :

Penjelasan singkat soal :

Input pertama adalah t yaitu banyaknya testcase yang akan dilakukan dalam menjalankan program. Kemudian n
adalah bilangan integer sebagai input program utama. Integer / bilangan bulat yang setiap digitnya tidak lebih
kecil dari digit di sebelah kanan bilangan bulat yang menurun. Misalnya 24558 meningkat, 888410 menurun dan
5 - keduanya meningkat dan menurun.

Dan-> n menghitung rasio penurunan n bilangan bulat -digit meningkatnya n -digit bilangan bulat (integer)

Maka,

Input:
2 // banyak testcase (t)

Output:

1.000000

1.200000

Pseudocode

1. //perulangan sebanyak t dengan decrement t (sebanyak jumlah testcase yang akan dilak
ukan program)
2. while (t--)
3. read n
4. for i=1 until 9
5. //val menjadi val sebelumnya*(n+i) sesuai increment i, dengan variabel n yang aw
alnya integer menjadi double
6. val = val *(double)(n+i)
7. // result merupakan variabel yang nantinya akan menjadi hasil yang di output ka
n
8. result = n+9 / 9-(40320/val)
9.
10. print result

Kode sumber :
2. SPOJ – CUT STICK

Accepted Submission :

Ketentuan panjang masing masing bagian tidak kurang dari 1m, panjangnya adalah bilangan bulat, dan
tidak ada kombinasi 3 bagian yang dapat membentuk segitiga apapun.

Kunci awal dari soal ini adalah ‘segitiga’. Bentuk tersebut memiliki sebuah aturan yang disebut triangle
inequality. Yang mana 2 sisi sembarang jika dijumlahkan maka hasilnya akan selalu lebih besar daripada sisi
ketiga. Dari aturan segitiga di atas maka dapat kita buat table sebagai berikut :

Pseudocode :
1. //inisialisasi array a indeks 1 dan 2 bernilai 1
2. a[1] = a[2] = 1
3. //perulangan i dari 3 sampai 39 untuk mengisi nilai array a
4. for i =3 until 39
5. //isi dari array a[i] bernilai secara bertambah dengan aturan fibonaci, yaitu penjumlah
an nilai sebelumnya(i-1) dengan sebelumnya lagi(i-2)
6. a[i] = a[i-1] + a[i-2]
7. //scan nilai n dengan tidak boleh EOF
8. read n
9. // jika n 1, langsung keluarkan 1
10. if n=1 , return 1
11. // jika n 2, langsung keluarkan 2
12. else if n=2 , return 2
13. //jika n bukan 1 atau 2 ,maka lakukan perulangan for supaya mendapat ans sebagai b
erapa potong tali yang dibuat.
14. else
15. //inisialisasi ans = 0 , banyak tali awalnya 0
16. for i=1 until 40
17. //jika n lebih dari sama dengan array a indeks i, maka temukan nilai ans maksimu
m
18. if n>= a[i]
19. //ans bertambah 1 tiap n berkurang
20. //nilai n selalu dikurangi dengan array a tiap indeks i
21. ans = ans+1
22. n = n-a[i]
23. else
24. //jika tidak,langsung kembalikan 40
25. i=40
26. //cetak jumlah tali
27. print ans

Kode Sumber :
Rangkuman Pertemuan 3

Perancangan Algoritma

1. Pendekatan Incremental, Membuat atau menciptakan solusi satu komponen atau permasalahan dalam
satu waktu.

2. Pendekatan Divide and Conquer, yaitu Memecah masalah asli menjadi beberapa contoh yang lebih
kecil dari masalah yang sama, atau memecah masalah tersebut menjadi masalah-masalah kecil sehingga
mudah untuk diselesaikan.
 Divide : Bagilah masalah menjadi beberapa subproblem yang merupakan contoh yang lebih kecil
dari permasalahan yang sama.
 Conquer : Taklukkan subproblem dengan menyelesaikannya secara rekursif. Jika ukuran
subproblemnya adalah cukup kecil, bagaimanapun, selesaikan saja submasalah dengan cara
yang lugas.
 Combine : Gabungkan solusi untuk submasalah ke dalam solusi untuk masalah aslinya.

Teknik untuk membuktikan nya dibagi menjadi beberapa bagian, yaitu

1. Basis

2. Maintanance

3. Termination / Terminasi

Base / Initialization : Nilainya benar sebelum loop


Pemeliharaan : Jika benar/true sebelum iterasi loop, itu tetap benar sebelum iterasi berikutnya.
Termination : Ketika loop berakhir, invariant memberi kita properti yang berguna yang membantu
menunjukkan bahwa algoritme sudah benar.

Sumber : Introduction to Algorithm

Anda mungkin juga menyukai