前几天跟凉哥讨论上将伤害的问题,怎么配装菜可以伤害最大化呢,写了一个程序来进行测试,但是后来发现测试的结果是存在问题的,高会心装备的数学期望很高,上将实际伤害也不错,但是打其他技能的时候如果不会心就没有伤害了,而且在实战中,因为有阵眼效果,伤害会更高。
代码如下:
public class ShangJiangTest { static double base = 4200; /*public void test(){ int[] a = new int[55]; double[] sum = new double[55]; for (int i = 0; i <55 ; i++) { a[i] = i + 1; } for (int i = 0; i <10 ; i++) { double now = 0; for (int j = 0; j <55 ; j++) { for (int k = 0; k < 7; k++) { int x = (int)(Math.random()*100); double p = st(1.0,k); if(x<a[j]){ now = base*1.75*p*(1+(double)(55-a[j])/100); } else now = base*p*(1+(double)(55-a[j])/100); sum[j] = sum[j] + now; } } } for (int i = 0; i < 55 ; i++) { System.out.println(sum[i]/10+" 这是会心为"+i+"的时候七刀的伤害"); } }*/ public void actual(int huixin,int pofang){ double sum = 0; for (int i = 0; i <10000 ; i++) { double now = 0; for (int k = 0; k < 7; k++) { int x = (int)(Math.random()*100); double p = st(1.0,k); if(x<huixin){ now = base*1.75*p*(1+(double)(pofang/100)); } else now = base*p*(1+(double)(pofang/100)); sum = sum + now; } } System.out.println((int)sum/10000 + "---- 会心为"+(huixin-9)+" 破防为"+pofang+" 的时候的平均伤害(10000次)"); } public double st(double x,int n){ double sum = x; for (int i = 0; i < n; i++) { sum = sum + 0.15; } return sum; } public static void main(String[] args) { new ShangJiangTest().actual(10,56); new ShangJiangTest().actual(17,49); new ShangJiangTest().actual(21,45); new ShangJiangTest().actual(27,40); new ShangJiangTest().actual(35,32); new ShangJiangTest().actual(41,26); new ShangJiangTest().actual(51,16); } }
运行结果如下:
在写程序的时候遇到了一些问题,最主要的是类型转化问题,因为在有除法和在小于1的数据的处理的时候,要把整个块强转成double类型进行运算。还有就是需求问题,没有思考清楚具体的计算公式就开始下手,结果修改了很久。算是给自己的教训吧,一个简单的程序写了一个小时,效率太低了。