import java.util.ArrayList;
import java.util.List;
import java.util.Random;
class CriticalHit {
public static void main
(String[] args
) { class Combo {
int d;
int hp;
public Combo(int d, int hp) {
this.d = d;
this.hp = hp;
}
public int getD() {
return d;
}
public int getHp() {
return hp;
}
}
List input
= new ArrayList
<Combo
>();
input.add(new Combo(4, 1));
input.add(new Combo(4, 4));
input.add(new Combo(4, 5));
input.add(new Combo(4, 6));
input.add(new Combo(1, 10));
input.add(new Combo(100, 200));
input.add(new Combo(8, 20));
input.
forEach(s
-> System.
out.
println(String.
format("d: %d\thp: %d\tprobability: %8f\tdamage: %d",
((Combo) s).getD(),
((Combo) s).getHp(),
CriticalHit.getCritChance(((Combo) s).getD(), ((Combo) s).getHp()),
CriticalHit.getCrit(((Combo) s).getD()))));
}
public static int getCrit(double d) {
int maxCrit = 0;
if (d != 1) {
maxCrit = 1 + r.nextInt((int) d);
if (maxCrit == d)
maxCrit += getCrit(d);
}
return maxCrit;
}
public static double getCritChance(double d, int hp) {
int exponent = (int) (hp / d);
int rest = (int) (hp % d);
double chance
= Math.
pow(1 / d, exponent
); if (rest > 0)
chance *= (d - rest + 1) / d;
return chance;
}
}
aW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CmltcG9ydCBqYXZhLnV0aWwuTGlzdDsKaW1wb3J0IGphdmEudXRpbC5SYW5kb207CgpjbGFzcyBDcml0aWNhbEhpdCB7CnB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgIGNsYXNzIENvbWJvIHsKICAgICAgICBpbnQgZDsKICAgICAgICBpbnQgaHA7CiAgICAgICAgcHVibGljIENvbWJvKGludCBkLCBpbnQgaHApIHsKICAgICAgICAgICAgdGhpcy5kID0gZDsKICAgICAgICAgICAgdGhpcy5ocCA9IGhwOwogICAgICAgIH0KICAgICAgICBwdWJsaWMgaW50IGdldEQoKSB7CiAgICAgICAgICAgIHJldHVybiBkOwogICAgICAgIH0KICAgICAgICBwdWJsaWMgaW50IGdldEhwKCkgewogICAgICAgICAgICByZXR1cm4gaHA7CiAgICAgICAgfQogICAgfQoKICAgIExpc3QgaW5wdXQgPSBuZXcgQXJyYXlMaXN0PENvbWJvPigpOwoKICAgIGlucHV0LmFkZChuZXcgQ29tYm8oNCwgMSkpOwogICAgaW5wdXQuYWRkKG5ldyBDb21ibyg0LCA0KSk7CiAgICBpbnB1dC5hZGQobmV3IENvbWJvKDQsIDUpKTsKICAgIGlucHV0LmFkZChuZXcgQ29tYm8oNCwgNikpOwogICAgaW5wdXQuYWRkKG5ldyBDb21ibygxLCAxMCkpOwogICAgaW5wdXQuYWRkKG5ldyBDb21ibygxMDAsIDIwMCkpOwogICAgaW5wdXQuYWRkKG5ldyBDb21ibyg4LCAyMCkpOwoKICAgIGlucHV0LmZvckVhY2gocyAtPiBTeXN0ZW0ub3V0LnByaW50bG4oU3RyaW5nLmZvcm1hdCgiZDogJWRcdGhwOiAlZFx0cHJvYmFiaWxpdHk6ICU4Zlx0ZGFtYWdlOiAlZCIsCiAgICAgICAgICAgICgoQ29tYm8pIHMpLmdldEQoKSwKICAgICAgICAgICAgKChDb21ibykgcykuZ2V0SHAoKSwKICAgICAgICAgICAgQ3JpdGljYWxIaXQuZ2V0Q3JpdENoYW5jZSgoKENvbWJvKSBzKS5nZXREKCksICgoQ29tYm8pIHMpLmdldEhwKCkpLAogICAgICAgICAgICBDcml0aWNhbEhpdC5nZXRDcml0KCgoQ29tYm8pIHMpLmdldEQoKSkpKSk7Cn0KCnB1YmxpYyBzdGF0aWMgaW50IGdldENyaXQoZG91YmxlIGQpIHsKICAgIGludCBtYXhDcml0ID0gMDsKICAgIGlmIChkICE9IDEpIHsKICAgICAgICBSYW5kb20gciA9IG5ldyBSYW5kb20oKTsKICAgICAgICBtYXhDcml0ID0gMSArIHIubmV4dEludCgoaW50KSBkKTsKICAgICAgICBpZiAobWF4Q3JpdCA9PSBkKQogICAgICAgICAgICBtYXhDcml0ICs9IGdldENyaXQoZCk7CiAgICB9CiAgICByZXR1cm4gbWF4Q3JpdDsKfQoKcHVibGljIHN0YXRpYyBkb3VibGUgZ2V0Q3JpdENoYW5jZShkb3VibGUgZCwgaW50IGhwKSB7CiAgICBpbnQgZXhwb25lbnQgPSAoaW50KSAoaHAgLyBkKTsKICAgIGludCByZXN0ID0gKGludCkgKGhwICUgZCk7CgogICAgZG91YmxlIGNoYW5jZSA9IE1hdGgucG93KDEgLyBkLCBleHBvbmVudCk7CiAgICBpZiAocmVzdCA+IDApCiAgICAgICAgY2hhbmNlICo9IChkIC0gcmVzdCArIDEpIC8gZDsKCiAgICByZXR1cm4gY2hhbmNlOwp9Cn0=