kita misalkan constanta = 100 sehingga x+y+z = 100 maka plot nya :
100+0+0 | 99+1+0 | 98+2+0 | 97+3+0 | ...dst... 0+100+0 | 99+0+1 | 98+1+1 | 97+2+1 | ...dst... 97+0+2 | 96+1+2 | ....dst..sampai.. 0+0+100bisa kita liat disini pertama kali yg mengalami peningkatan/jumlah yang paling tinggi terlebih dahulu adalah x {100+0+0 | 99+1+0 ...} lalu disusul y dan yang terakhir adalah z. Jadi pada saat x mencapai puncak maka y akan naik dan pada saat y mencapai puncak maka z akan naik, dan seterusnya jika soalnya ingin lebih dari dari 3 variabel [a+b+c+d+....=constanta].
Waktunya merealisasikan konsep tersebut dalam algorithma pemrograman. Oke berikut lagoritma komplitnya yang saya tulis dalam bahasa C (penjelasan menyusul) :
int calculate (int constanta) { /*x+y+z=constanta -> berapa kemungkinan*/
unsigned int x, y, z, cycle, solusi;
cycle = 0;
z=0; // reset dan buat jaga2
for(;z<=constanta;z++) { // 3.kalkulasi ketiga
y=0; // reset
for(;y<=constanta;y++) { // 2.kalkulasi kedua
solusi = 0;x=0; //reset
for(;solusi<=constanta;x++) { // 1.check jika x+y+z nilainya belum sama dengan constanta
solusi = z + y + x; // stor sementara hasil x+y+z
if (solusi==constanta) { // counting jumlah kemungkinan jika benar x+y+z = constanta "buat jaga2"
printf("%d %d %d | ",x,y,z); // print solusi di layar
cycle++; // counting jumlah solusi jika = constanta
}
}
}
}
return cycle;
}
2 wong sing ngomong:
belum effisien!
@cimenx harusnya dikasih chekpoint jadi loop-nya ga kebanyaken. misal 1-30, 31-60, 61-100. Jadinya ga perlu counting 1-100 bwt liat mana yang memnuhi persamaan.
Posting Komentar