









Dear Kanjeng Pembaca sekalian,… soal berikut nya yang cukup menarik adalah memilih 2 kartu dari maksimal 9 kartu yang dimasukkan… dimana milihnya dari kanan… dan nanti hasilnya akan ditampilkan angka kartu yang dipilih …!!! Ini menarik sekali soal ini… dan tingkat kesulitannya lumayan tinggi … terlebih cara yang diminta adalah menggunakan pow, alias angka yang dipangkatkan …!!! Untuk lebih lengkapnya soal dapat dibaca sbb :
Selanjutnya,… ada constraint bahwa angka yang dimasukkan sebagai cards itu harus diatas 10 … karena minimal khan nanti 2 kartu yang akan dipilih… sebagai C1, C2 …!!! Kartu yang dimasukkan harus lebih kecil dari INT_MAX … dan output nya sebagaimana gambar dibawah ini… terlihat jika sama-sama ganjil atau sama-sama genap maka akan dicetak ‘Lose !’ … sedangkan kalau satu kartu ganjil dan satu kartu genap dicetak ‘Win 50$’… dan jika kartu nya sama angkanya maka dicetak ‘Win 100$!’ … !!!
Pada awalnya terpikir untuk melakukan konversi ke string, kemudian dilakukan manipulasi string… waaagh selesai ini cepet …!!! Namun setelah membaca secara teliti… oooogh nggak boleh sebagai petunjuk menggunakan pow … ooogh ok untuk latihan …!!! Kalau dalam dunia programming… asal input valid, output yang dihasilkan valid… yaaagh boleh-boleh saza … dan sah-sah saza… banyak cara menuju Roma tooooh …???
Tahap pertama tentu saja mendeklarasikan berbagai variabel yang diperlukan, kemudian menginput berbagai variabel yaitu cards, c1 dan c2 …!!! Kemudian melakukan berbagai validasi input… misalnya cards harus diatas 10 dan dibawah nilai max (2147483647 red.) …!!! Demikian juga c1 dan c2 dilakukan validasi … misalnya c1 dan c2 gak boleh sama… dan kembali validasi ini penting agar tidak terjadi garbage in …!!!
Berikutnya dilakukan proses… dimana menghitung untuk mendapatkan angka dari c1 … yaitu pertama mencari angka tengahnya … misalnya kalau 123456 kemudian misalnya C1 = 3,… so target kita akan mengeluarkan angka 4 …!!! Jadi angka tengah itu ,,, akan menghasilkan 123 … dengan cara 123456 dibagi dengan 10 pangkat C1 (dalam hal ini 3) …!!! Tentu hasilnya nanti adalah 123 … ini disebut angka tengah …!!! Berikutnya dilakukan perkalian angka tengah ini dengan 10 pangkat C1 (dalam hal ini 3)… dan angkanya 123000 so kita masukkan sebagai variabel pengurang …!!!
Berikutnya 123456 – 123000 (cards dikurangi dengan pengurang1 red.) kita masukkan kedalam variable pembilang1 … so dalam hal ini pembilang menjadi 456 …!!! Pembilang ini nanti akan dibagi dengan 10 pangkat c1 -1 dan dimasukkan ke dalam variable bil1 …!!! So dalam case ini 456 dibagi 10 pangkat 2 = 4 …!!! So disini kita sudah mendapatkan bil 1… cara yang sama kita lakukan untuk memperoleh c2 …!!! So sampai titik ini sudah beres… sudah mendapatkan angka kartu dari variabel c1 dan c2 …!!!
Berikutnya akan gampang tinggal membandingkan bil1 dengan bil2 … jika sama persis maka dikeluarkan cetak Win ‘100$!’ … jika ganjil dan genap dicetak ‘Win 50$’ … sebaliknya jika keduanya ganjil atau keduanya genap cetak ‘Lose’ …!!! Naaagh berikut adalah programnya … monggo untuk disimak …!!! 😀
#include <stdio.h>
#include <math.h>
int main (){int vcards;int c1, c2, pos1, pos2;int tengah1, tengah2;int pengurang1, pengurang2;int bil1, bil2;int pembilang1, pembilang2;int nilai_max = 2147483647;scanf(“%d”, &vcards);scanf(“%d %d”, &c1, &c2);if (vcards > 10 && vcards < nilai_max && c1 >= 1 && c1 <= 10&& c2 >= 1 && c2 <= 10 && c1 != c2){tengah1 = vcards / pow(10, c1);tengah2 = vcards / pow(10, c2);// printf(“tengah1 adalah : %d \n”, tengah1);// printf(“tengah2 adalah : %d \n”, tengah2);pengurang1 = tengah1 * pow(10, c1);pengurang2 = tengah2 * pow(10, c2);/* printf(“Pengurang1 adalah : %d \n”, pengurang1);printf(“Pengurang2 adalah : %d \n”, pengurang2); */pembilang1 = vcards – pengurang1;pembilang2 = vcards – pengurang2;// printf(“Pembilang1 adalah : %d \n”, pembilang1);// printf(“Pembilang2 adalah : %d \n”, pembilang2);bil1 = pembilang1 / pow(10, c1-1);bil2 = pembilang2 / pow(10, c2-1);// printf(“bil1 adalah : %d \n”, bil1);// printf(“bil2 adalah : %d \n”, bil2);// mengecheck agar tidak ada bil1 dan bil2 yang bernilai 0if (bil1 > 0 && bil2 > 0){// menentukan output apakah win 100, win 50 or loseif (bil1 == bil2){printf(“Win 100$! \n”);}elseif ((bil1 % 2 == 0) && (bil2 % 2 ==0)){printf(“Lose! \n”);}else{if ((bil1 % 2 == 1) && (bil2 % 2 ==1)){printf(“Lose! \n”);}else{printf(“Win 50$! \n”);}}}else{printf(“Data is invalid \n”);}}else{printf(“Data is invalid \n”);}return 0;}
Leave a Reply