Institut Teknologi Harapan Bangsa Programming

advertisement
PROBLEM A
Deskripsi
Pada suatu hari ada 5 orang dan 1 monyet sedang berkemah di tengah hutan. Lalu kelima orang itu
mengumpulkan batang kayu dan disimpan di perkemahan mereka. Pada malam hari ada 1 orang yang
membagi batang-batang kayu yang telah dikumpulkan tersebut sebanyak 5 bagian sama banyak dan
ternyata ada tersisa satu batang kayu yang akhirnya diberikan kepada monyet mereka, dan orang itu
mengambil 1/5 dari batang-batang kayu tersebut. Keesokan harinya orang kedua melakukan hal yang
sama, membagi batang-batang kayu yang ada kedalam 5 bagian sama banyak dan ternyata tersisa satu
batang yang akhirnya diberikan kepada monyet mereka dan orang ini mengambil 1/5 dari batang-batang
ini. Orang ke 3, 4, dan 5 pun melakukan hal yang sama dan selalu tersisa satu batang yang diberikan
kepada monyet mereka. Mereka melakukan hal ini di malam yang berbeda, tidak bersamaan. Lalu
setelah semua orang melakukan “korupsi” ini, sisa batang yang ada ternyata habis dibagi 5 sehingga
apabila dibagi rata sebanyak 5 bagian, monyet mereka tidak akan mendapatkan apa-apa lagi.
Jika biasanya anda diminta untuk menentukan jumlah batang kayu pada awalnya, saat ini anda diberi
jumlah batang kayu pada awalnya dan anda diminta untuk menentukan ada berapa orang yang ikut
dalam perkemahan itu. Monyet yang dibawa dalam perkemahan selalu sebanyak 1 monyet.
Format Input
Satu bilangan bulat n (2 <= n <= 30000) setiap barisnya yang menyatakan jumlah batang kayu yang
dikumpulkan orang-orang yang mengikuti perkemahan. Input diakhiri dengan n = 0
Format Output
Untuk setiap n keluarkan satu baris yang berisi sebuah bilangan bulat x yang merupakan jumlah orang
yang mengikuti perkemahan ini dengan format “x orang dan 1 monyet.” tanpa tanda kutip. Apabila tidak
ada jawaban yang mungkin, keluarkan kalimat “tidak ada jawaban.” tanpa tanda kutip.
Sample Input
3121
35
12
0
Sample Output
5 orang dan 1 monyet.
2 orang dan 1 monyet.
tidak ada jawaban.
PROBLEM B
Deskripsi
Anda diberikan sebuah deretan bilangan lalu anda diminta untuk mengurutkan bilangan-bilangan
tersebut. Tetapi untuk mengurutkan sebuah deretan bilangan terdapat biaya dan anda diminta untuk
mengurutkan deretan bilangan tersebut dengan biaya yang seminimal mungkin. Biaya untuk
mengurutkan bilangan adalah jumlah dari biaya yang diperlukan untuk menukar dua buah bilangan yaitu
jumlah dari dua bilangan yang ditukar. Sebagai contoh deretan bilangan yang diberikan adalah 8 1 2 4 ,
maka apabila anda melakukan proses seperti ini :
8 1 2 4 -> tukar 8 dan 1 dengan biaya 8 + 1 = 9
1 8 2 4 -> tukar 8 dan 2 dengan biaya 8 + 2 = 10
1 2 8 4 -> tukar 8 dan 4 dengan biaya 8 + 4 = 12
1 2 4 8 -> sudah terurut, total biaya = 9 + 10 + 12 = 31.
Proses ini bukanlah proses pengurutan yang paling optimal. Perhatikan proses berikut ini :
8 1 2 4 -> tukar 1 dan 2 dengan biaya 1 + 2 = 3
8 2 1 4 -> tukar 1 dan 4 dengan biaya 1 + 4 = 5
8 2 4 1 -> tukar 8 dan 1 dengan biaya 8 + 1 = 9
1 2 4 8 -> sudah terurut, total biaya = 3 + 5 + 9 = 17.
Proses ini adalah proses yang paling optimal. Buatlah sebuah program yang dapat menghitung biaya
untuk proses pengurutan yang paling optimal.
Format Input
Sebuah bilangan n (1 <= n <= 1000) yang menyatakan jumlah bilangan yang akan diurutkan. Diikuti n
buah bilangan yang dijamin muat dalam tipe data integer 32 bit.
Format Output
Satu bilangan x yang merupakan biaya minimum yang diperlukan untuk mengurutkan bilangan.
Sample Input
48124
Sample Output
17
PROBLEM C
Deskripsi
Pak Casli ingin menulis sebuah bukudan setiap halaman pada buku dia akan selalu dinomori dengan
bilangan romawi. Lalu dia penasaran, berapa jumlah setiap karakter bilangan romawi yang akan dia
gunakan dalam buku buatannya. Bilangan romawi terdiri dari symbol “I” , “V” , “X” , “L” , “C” yang
masing-masing bernilai 1 , 5 , 10 , 50 , 100. Sebagai contoh bilangan romawi untuk 24, 39, 44, 49, dan 94
adalah “XXIV” , “XXXIX” , “XLIV” , “XLIX” , dan “XCIV”. Buatlah sebuah program yang dapat menghitung
jumlah kemunculan setiap karakter bilangan romawi dalam buku yang dia buat.
Format Input
Input terdiri dari beberapa baris yang setiap baris terdiri dari satu buah bilangan bulat n (1 <= n <= 100)
yang merupakan jumlah halaman dalam buku buatan Pak Casli. Input diakhiri dengan n = 0.
Format Output
Untuk setiap n keluarkan rincian jumlah kemunculan setiap karakter bilangan romawi dalam buku Pak
Casli. Perhatikan sample output untuk format output yang seharusnya.
Sample Input
1
2
20
99
0
Sample Output
1: 1 I, 0 V, 0 X, 0 L, 0 C
2: 3 I, 0 V, 0 X, 0 L, 0 C
20: 28 I, 10 V, 14 X, 0 L, 0 C
99: 140 I, 50 V, 150 X, 50 L, 10 C
PROBLEM D
Deskripsi
Pak Casli ingin mengalikan dua buah bilangan. Lalu ia penasaran berapa jumlah kemunculan setiap
bilangan dalam hasil perkalian ini. Sebagai contoh 1234 dan 5678 jika dikalikan maka hasilnya adalah
7006652. Dalam bilangan tersebut angka 7 muncul 1 kali, angka 0 muncul 2 kali, angka 6 muncul 2 kali,
angka 5 muncul 1 kali dan angka 2 muncul 1 kali. Karena bilangan yang dikalikan bisa sepanjang 100
digit, maka tidak mungkin Pak Casli menghitung sendiri. Maka ia pun meminta bantuan anda untuk
membuat program yang dapat membantunya.
Format Input
Dua buah bilangan bulat non-negative a dan b yang maksimal sepanjang 100 digit dipisahkan spasi.
Format Output
(perhatikan sample output)
Sample Input
1234 5678
Sample Output
2 (0) , 0 (1) , 1 (2) , 0 (3) , 0 (4)
1 (5) , 2 (6) , 1 (7) , 0 (8) , 0 (9)
PROBLEM E
Deskripsi
Pak Casli memiliki sebuah kartu yang berisi sebuah bilangan. Lalu Pak Casli ingin memotong-motong
bilangan tersebut sedemikian rupa sehingga potongan-potongan bilangan tersebut apabila dijumlahkan
akan mendekati sebuah bilangan target tetapi tidak melewatinya. Sebagai contoh kartu Pak Casli berisi
bilangan 39114 dan bilangan target yaitu 100, maka Pak Casli dapat memotong kartu tersebut menjadi 4
kartu yang berisi bilangan 3 , 91 , 1, dan 4 , sehingga jumlah semuanya adalah 3+91+1+4=99. Apabila
kartu tersebut dipotong menjadi 3 kartu yang berisi bilangan 3 , 91 , dan 14 , maka jumlahnya adalah
3+91+14=108 yang lebih besar daripada sebelumnya tetapi melewati target sehingga tidak valid. Buatlah
program yang dapat menghitung jumlah dari potongan kartu-kartu yang paling mendekati target tetapi
tidak melewatinya.
Format Input
Input terdiri dari beberapa baris. Setiap baris terdiri dari sebuah bilangan bulat positif n dan m yang
merupakan bilangan dalam kartu Pak Casli dan bilangan target. n dan m dijamin muat untuk tipe data
integer 32 bit. Input diakhiri dengan End Of File.
Format Output
Untuk setiap n keluarkan sebuah bilangan bulat yang merupakan jumlah bilangan dari potonganpotongan kartu yang paling mendekati m.
Sample Input
39114 100
39114 1000
39114 100000
Sample Output
99
9118
39114
Download