|
本帖最后由 浅殇流年 于 2022-3-18 23:22 编辑
结论: 计算药和宠物同时存在时以官方口径概率执行500万次增幅,结果为
一共计算5000000次;
共使用矛盾:968306255,平均使用矛盾:193.661251;
共增幅141199136次,平均增幅次数:28.2398272
有兴趣大家可以自行根据官方概率扩展11,12,13,14…… 修改level < 10和double[] arr数组即可
代码如下:public static void main(String[] args) {
//重复计算次数
int size = 5000000;
//增幅成功率
/**
* 这里填写各个阶段的强化成功率,我这边填的是算上增幅药和宠物的强化成功率
*/
double[] arr = new double[]{100, 100, 100, 100, 84.2, 73.8, 63.4, 73.8, 63.4, 52};
//统计矛盾使用数量的数组
List<Integer> maodunSumCount = new ArrayList<Integer>(size);
List<Integer> numberCount = new ArrayList<Integer>(size);
for (int i = 0; i < size; i++) {
//当前增幅等级
int level = 0;
//增幅矛盾消耗合计
int maodunSum = 0;
//增幅次数
int number = 0;
//开始循环增幅 10
while (level < 10) {
//计算成功率
if (random100() < arr[level]) {
//强化成功 增幅等级+1
level++;
} else {
//强化失败,根据增幅等级减少当前增幅
if (level > 7) {
level -= 3;
} else if (level > 4) {
level -= 1;
}
}
maodunSum += level + 1;
number++;
}
//单件增幅10完毕 记录使用矛盾数量
maodunSumCount.add(maodunSum);
numberCount.add(number);
System.out.println("增幅第" + i + "件成功,使用矛盾:" + maodunSum + "个,增幅:" + number + "次;");
}
//合计矛盾数量
Long sum = 0L;
for (Integer maodunSum : maodunSumCount) {
sum += maodunSum;
}
//合计增幅次数
Long numberSum = 0L;
for (Integer number : numberCount) {
numberSum += number;
}
System.out.println("一共计算" + size + "次," +
"共使用矛盾:" + sum + ",平均使用矛盾:" + new BigDecimal(sum).divide(new BigDecimal(size)).toString()+";" +
"共增幅"+numberSum+"次,平均增幅次数:"+ new BigDecimal(numberSum).divide(new BigDecimal(size)).toString());
}
public static int random100() {
int i = (int) (Math.random() * 100);
return i;
}
|
评分
-
查看全部评分
|