Anda di halaman 1dari 9

The Challenge

“Penjual Pensil yang Rakus”

Desain dan Analisa Algoritma

NAMA : WAHYU BIMANTARA


NIM : 175150218113027
KELAS : FILKOM 4A

FAKULTAS ILMU KOMPUTER

TEKNIK INFORMATIKA

UNIVERSITAS BRAWIJAYA
1. Deskripsi Masalah

Terdapat seorang penjual pensil yang rakus ingin mendapatkan keuntungan yang lebih
banyak dari yang biasanya dia dapatkan. Dia menerapkan sebuah aturan baru untuk
menetapkan harga jual dari pensilnya. Aturan barunya adalah dia mengalikan harga
jual asli dari pensil dengan jumlah pensil yang sudah dibeli dibelumnya oleh seorang
pelanggan ditambah dengan 1, contohnya ada seorang pelanggan yang membeli 2
buah pensil, maka harga yang diterapkan ke pelanggan tersebut adalah:
 Harga pensil pertama : (0 + 1) × ℎ
 Harga pensil kedua : (1 + 1) × ℎ
Jika diberikan jumlah dari orang dan jumlah dari pensil yang ingin mereka beli,
buatlah sebuah program untuk menentukan harga total paling minimal untuk membeli
semua pensil tersebut!
Misalkan ada k = 3 orang yang ingin membeli n = 4 pensil dengan harga masing
masing pensil c= [1, 2, 3, 4]. Untuk mendapatkan harga paling minimal, maka
masing-masing orang harus membeli pensil dengan harga [2, 3, 4] terlebih dahulu.
Kemudian karena masing-masing orang sudah membeli x = 1 pensil, maka pensil
pertama pada list, c[0], memiliki harga: (Jumlah Pembelian Sebelumnya + 1) × c[0] =
(1 + 1) × 1 = 2. Sehingga harga total yang harus dibayarkan ke penjual pensil tersebut
adalah 2 + 3 + 4 + 2 = 11
2. Deskripsi Fungsi
Buatlah sebuah fungsi cariHargaMinimal untuk mendapatkan harga paling
minimal dari semua kemungkinan harga total yang ada. Fungsi ini memiliki dua
parameter input sebagai berikut:
 c : sebuah array dari bilangan integer yang merepresentasikan harga dari
masing-masing pensil
 k : sebuah angka yang merepresentasikan jumlah orang.
3. Format Input
 File input yang harus digunakan untuk menguji akurasi algoritma sudah
disediakan (yaitu mulai dari file bernama x00.txt sampai x09.txt)
 Baris pertama menyimpan nilai n dan k yang dipisahkan oleh spasi. n adalah
jumlah pensil yang ingin dibeli dan adalah jumlah orang.
 Baris kedua menyimpan nilai yang merepresentasikan harga asli dari masing-
masing pensil, c[i]
Note :
- Program saya menggunakan inputan array Harga (yang ada
di txt) jadi apabila menjalankan program untuk
pembuktian per txt ( x00.txt sampai x09.txt )maka silahkan ganti
pada baris ke-20 seperti yang ada pada kode di bawah ini.

- Untuk Programnya beserta txtnya saya zip

Challenges.java
1 /**@author BIMA*/
2 import java.io.*;
3 import java.util.Arrays;
4 import java.util.Collections;
5 import java.util.Scanner;
6
7 public class Challanges {
8
9 public static void main(String[] args) throws FileNotFoundException, IOException {
10 System.out.println("\n Challanges DAA ");
11 System.out.println(" Penjual Pensil yang Rakus ");
12 System.out.println(" Menggunakan data inputan .txt ");
13 System.out.println("Desain dan Analisa Algoritma – Universitas Brawijaya");
14 System.out.println("====================================================");
15 System.out.println("\n");
16 int jmlbaris = 0;
17 String semuadata, isibuffer;
18 semuadata = "";
19 //mengambil file inputan .txt
20 FileInputStream baca = new FileInputStream("x01.txt");
21 BufferedReader bacabuffer = new BufferedReader(new InputStreamReader(baca));
22 while ((isibuffer = bacabuffer.readLine()) != null) {
23 semuadata += isibuffer + " ";
24 jmlbaris++;
25 }
26 String[] a = semuadata.split(" "); //di pisah dengan spasi
27 Integer[] c = new Integer[a.length];//membuat array int
28 for (int i = 0; i < c.length; i++) {
29 c[i] = Integer.parseInt(a[i]);// Parsing dari string to int
30 }
31 System.out.println("Array Harga sebelum diSort: ");
32 for (Integer c1 : c) {
33 System.out.print(c1 + " ");
34 }
35 System.out.println("\n\n");
36 // Sorting int Array in descending order
37 System.out.println("Array Harga Sort secara Descending: ");
38 Arrays.sort(c, Collections.reverseOrder());
39 System.out.println("");
40 for (Integer c1 : c) {
41 System.out.print(c1 + " ");
42 }
43
44 Integer y = 0, x = 0, jumlah = 0, z = 0;//deklarasi variabel
45 Scanner input = new Scanner(System.in);
46 System.out.println("\n\n");
47 System.out.print("Masukkan Jumlah Pembeli: ");
48 double k = input.nextInt();// k adalah org yg akan beli pensil
49 System.out.println("Jumlah Pensil: " + c.length);
50
51 double n = c.length;// n adalah jumlah pensil yg tersedia
52 double nk = Math.ceil(n / k);//Mencari pembagian untuk jml org yg akan beli
53 //Formula Perhitungan
54 System.out.println(" ");
55 for (y = 0; y < nk; y++) {
56 for (x = 0; x < k && z < n; x++) {
57 jumlah += (y + 1) * c[z];
58 z += 1;
59 }
60 }
61 System.out.println("Harga terendah yang didapatkan adalah: " + jumlah);
62 }
63
64 }
Output untuk file x00.txt

Output untuk file x01.txt


Output untuk file x02.txt

Output untuk file x03.txt


Output untuk file x04.txt

Output untuk file x05.txt


Output untuk file x06.txt

Output untuk file x07.txt


Output untuk file x08.txt

Output untuk file x09.txt