format masukan dan keluaran

advertisement
Sesi Latihan
OSN IX
Halo Dunia
Kode soal: osn1001.PAS/C/CPP
Batas Run-time: 1 detik / test-case
Batas Memori: 16 MB
Salah satu soal paling klasik di dunia pemrograman, Halo Dunia. Sayangnya soal tersebut tidak terlalu mudah bagi
bebek Pak Dengklek, mereka masih sering bingung mengenai urutan karakter pada kata-kata "Halo Dunia" tersebut.
Kini tugas Anda adalah untuk melakukan pengecekan, berapa banyak karakter yang sudah benar pada hasil keluaran
program bebek Pak Dengklek.
FORMAT MASUKAN
Sebuah baris berisi 10 karakter alfabet atau spasi.
FORMAT KELUARAN
Sebuah baris berisi sebuah bilangan bulat yang menyatakan banyaknya karakter yang sudah benar pada hasil
keluaran program bebek Pak Dengklek.
CONTOH MASUKAN 1
aHalo Duni
CONTOH KELUARAN 1
0
CONTOH MASUKAN 2
HaLo DuNiA
CONTOH KELUARAN 2
10
CONTOH MASUKAN 3
Halo World
CONTOH KELUARAN 3
5
Penjelasan
Pada contoh pertama, kesalahan kecil ternyata terbukti fatal. Pada contoh kedua, meskipun bebek Pak Dengklek
menggunakan huruf besar dan kecil secara tak beraturan, setidaknya hasilnya tetap Halo Dunia. Pada contoh ketiga,
walau Bahasa Inggris dari dunia adalah world, tidak berarti hasil keluaran program bebek Pak Dengklek benar.
Halaman 1 dari 6
Sesi Latihan
OSN IX
Deret Fibonaci
Kode soal: osn1002.PAS/C/CPP
Batas Run-time: 1 detik / test-case
Batas Memori: 16 MB
Salah satu soal klasik lainnya di dunia pemrograman, Deret Fibonaci. Lagi-lagi, soal tersebut tidak terlalu mudah bagi
bebek Pak Dengklek, mereka masih sering bingung mengenai urutan suatu bilangan pada deret fibonaci. Kini tugas
Anda adalah untuk membantu melakukan pengecekan, urutan ke berapakah suatu bilangan pada deret fibonaci.
Deret fibonaci yang dimaksud dalam hal ini dimulai dari bilangan 0 dan 1. Dan, sesuai definisi deret fibonaci, bilangan
ketiga dan seterusnya adalah hasil penjumlahan dari dua buah bilangan sebelumnya. Sebagai contoh, sepuluh
bilangan pertama dalam deret fibonaci secara berurutan adalah 0 1 1 2 3 5 8 13 21 34.
FORMAT MASUKAN
Sebuah baris berisi sebuah bilangan bulat (5 ≤ bilangan ≤ 1030) yang dipertanyakan urutannya pada deret fibonaci.
Lima puluh persen masukan berisi bilangan yang tidak lebih besar dari 10 000 000 000.
FORMAT KELUARAN
Sebuah baris berisi sebuah bilangan bulat yang menyatakan urutan bilangan dari masukan pada deret fibonaci. Jika
bilangan dari masukan tidak ada pada deret fibonaci, keluarkan bilangan 0.
CONTOH MASUKAN 1
5
CONTOH KELUARAN 1
6
CONTOH MASUKAN 2
11
CONTOH KELUARAN 2
0
CONTOH MASUKAN 3
34
CONTOH KELUARAN 3
10
Halaman 2 dari 6
Sesi Latihan
OSN IX
Pengurutan Bergelembung
Kode soal: osn1003.PAS/C/CPP
Batas Run-time: 1 detik / test-case
Batas Memori: 16 MB
Salah satu algoritma paling klasik di dunia pemrograman, algoritma pengurutan bergelembung. Tidak lain, kegunaan
dari algoritma tersebut adalah untuk mengurutkan sekumpulan data. Berikut ini adalah contoh kodenya dalam
bahasa PASCAL jika data yang dimaksud adalah bilangan bulat:
var data:array[1..10000] of longint;
n,i,j,temp:longint;
begin
readln(n);
for i:=1 to n do readln(data[i]);
for i:=1 to n-1 do
for j:=i+1 to n do
if (data[i]>data[j]) then
begin
temp:=data[i];
data[i]:=data[j];
data[j]:=temp;
end;
for i:=1 to n do writeln(data[i]);
end.
Dan berikut ini adalah contoh kodenya dalam bahasa C/C++:
int data[10001];
int n,i,j,temp;
int main(){
scanf("%d",&n);
for (i=1;i<=n;i++) scanf("%d",data[i]);
for (i=1;i<=n-1;i++)
for (j=i+1;j<=n;j++)
if (data[i]>data[j]){
temp=data[i];
data[i]=data[j];
data[j]=temp;
}
for (i=1;i<=n;i++) printf("%d\n",data[i]);
return 0;
}
Mengetahui bahwa algoritma tersebut penting, bebek Pak Dengklek ingin mencetaknya lalu menghafalkannya.
Bantulah mereka dalam melakukan pencetakan.
FORMAT MASUKAN
Sebuah baris berisi "PAS" atau "CPP" tanpa tanda kutip, yang akan menentukan kode dalam bahasa pemrograman
mana yang ingin dicetak.
Halaman 3 dari 6
Sesi Latihan
FORMAT KELUARAN
OSN IX
Beberapa baris, tepat seperti contoh di atas.
CONTOH MASUKAN 1
PAS
CONTOH KELUARAN 1
var data:array[1..10000] of longint;
n,i,j,temp:longint;
begin
readln(n);
for i:=1 to n do readln(data[i]);
for i:=1 to n-1 do
for j:=i+1 to n do
if (data[i]>data[j]) then
begin
temp:=data[i];
data[i]:=data[j];
data[j]:=temp;
end;
for i:=1 to n do writeln(data[i]);
end.
CONTOH MASUKAN 2
CPP
CONTOH KELUARAN 2
int data[10001];
int n,i,j,temp;
int main(){
scanf("%d",&n);
for (i=1;i<=n;i++) scanf("%d",data[i]);
for (i=1;i<=n-1;i++)
for (j=i+1;j<=n;j++)
if (data[i]>data[j]){
temp=data[i];
data[i]=data[j];
data[j]=temp;
}
for (i=1;i<=n;i++) printf("%d\n",data[i]);
return 0;
}
Halaman 4 dari 6
Sesi Latihan
OSN IX
Tebak Angka
Kode soal: osn1004.PAS/C/CPP
Batas Run-time: 1 detik / test-case
Batas Memori: 16 MB
Berbeda dengan tiga hal klasik lainnya, kali ini bebek Pak Dengklek bermain dengan sebuah permainan tebaktebakan interaktif yang baru.
Pada permainan tebak-tebakan ini, mula-mula Pak Dengklek akan memikirkan sebuah bilangan bulat antara A dan B
(1 ≤ A ≤ B ≤ 30) dan Pak Dengklek akan memberitahukan nilai A dan B tersebut. Kemudian, bebek boleh menebak
apakah bilangan yang Pak Dengklek pikirkan adalah X atau bukan dan jika bukan apakah terlalu kecil atau terlalu
besar. Demikian pula lah, Pak Dengklek akan menjawab "terlalu kecil" jika tebakan bebek masih lebih kecil dibanding
bilangan yang Pak Dengklek pikirkan, "terlalu besar" jika sebaliknya, atau "selamat" jika tebakannya tepat.
Sudah dapat diduga, seharusnya ada batasan banyak pertanyaan yang bebek boleh tanyakan (karena jika tidak, maka
pasti bebek berhasil menjawabnya, coba saja satu persatu). Pada permainan ini Pak Dengklek menentukan bahwa
banyaknya pertanyaan tidak boleh lebih dari 10 dan ia yakin bahwa bebek yang cerdik pasti bisa menjawabnya
bahkan jauh di bawah batasan tersebut.
Bebek sekali lagi merasa pusing ditantang oleh Pak Dengklek, bantulah mereka untuk memenangkan permainan ini.
INFORMASI TIPE SOAL
Tipe soal seperti ini biasa disebut "interaktif". Pada soal ini Anda akan berinteraksi dengan program penguji melalui
standard input dan standard output. Perhatikan format masukan dan keluaran di bawah ini dengan seksama.
FORMAT MASUKAN DAN KELUARAN
Pada saat program Anda dimulai, bacalah dua buah bilangan bulat A dan B. Setelah itu mulailah menebak dengan
mencetak sebuah bilangan bulat (seharusnya antara A dan B). Selanjutnya, bacalah sebaris kalimat yang isinya antara
lain "terlalu kecil", "terlalu besar", atau "selamat". Jika kalimat yang Anda baca adalah "selamat", tidak perlu ada
kelanjutan dari program Anda (dengan kata lain, program Anda harus berakhir dan tentunya program Anda
mendapatkan nilai untuk kasus tersebut). Sedangkan jika kalimat yang Anda baca bukan "selamat", Anda perlu
menebak lagi dan seterusnya. Jika sampai 10 kali Anda menebak belum pernah ada kata "selamat", program Anda
akan dihentikan secara paksa oleh program penguji dan tentunya program Anda tidak mendapatkan nilai (atau
mendapatkan nilai nol) untuk kasus tersebut.
Petunjuk "bacalah" dan "mencetak" yang dijelaskan di atas dapat Anda lakukan dengan menggunakan perintah
standard seperti write, writeln, scanf, printf, dll selayaknya Anda mengerjakan soal biasa. Yang perlu diperhatikan
adalah bahwa untuk tipe soal interaktif seperti ini, Anda harus selalu memberikan perintah "fflush(stdout);" (bagi
pengguna C/C++) atau "flush(output);" (bagi pengguna PASCAL) setiap kali Anda mencetak keluaran (dengan kata
lain, setiap kali ada perintah write/writeln/scanf/printf/dll, tepat di bawahnya harus ada perintah fflush/flush).
Berikut ini adalah contoh kode program dalam bahasa PASCAL yang akan selalu menebak bilangan 5 tanpa peduli A
dan B yang diberikan:
Halaman 5 dari 6
Sesi Latihan
var a,b,i:longint;
hasil:string;
begin
readln(a,b);
for i:=1 to 10 do
begin
writeln(5);
flush(output);
readln(hasil);
if (hasil='selamat') then break;
end;
end.
OSN IX
Dan berikut ini dalam bahasa C/C++:
int a,b,i;
char hasil[20];
int main(){
scanf("%d %d\n",&a,&b);
for (i=1;i<=10;i++){
printf("5\n");
fflush(stdout);
gets(hasil);
if (strcmp(hasil,"selamat")==0) break;
}
return 0;
}
CONTOH INTERAKSI 1
KELUARAN ANDA - KELUARAN PENGUJI
1 10
1
terlalu kecil
9
terlalu besar
7
selamat
CONTOH INTERAKSI 2
KELUARAN ANDA - KELUARAN PENGUJI
1 3
1
terlalu kecil
2
terlalu kecil
3
selamat
Penjelasan
Pada contoh pertama, bilangan yang Pak Dengklek pikirkan adalah 7, sedangkan pada contoh kedua adalah 3.
Halaman 6 dari 6
Download