我目前正试图找出某个方法的作用,以便继续对其进行注释,提供后置条件和循环不变量。
我发现了什么:
在正面和负面数组上,所有正数x
在第一次遇到最小值时变为正数。
当数组全部为负数时,x
和y
是元素的总和。
有人看到另一种方法来分析这种方法吗?谢谢你的时间。
Java代码:
public class funA {
public static void functionOfA(int a[]) {
int MAXINT = Integer.MAX_VALUE;
int x = MAXINT;
int y = MAXINT;
int i = 0;
int n = a.length;
while(i != n) {
if(y == MAXINT) {
y = a[i];
x = min(x, y);
System.out.println("x: " + x + " y: " + y);
i= i+1;
} else {
y = min(y + a[i], a[i]);
x= min(x, y);
System.out.println("x: " + x + " y: " + y);
i= i+1;
}
}
System.out.println(x + " " + y);
}
public static int min(int x, int y) {
if(x < y) {
return x;
} else {
return y;
}
}
public static void main (String args[]) {
int a[]= new int[] { 0, -9, 3, 2, -4, 3, -12, 3, 1 };
functionOfA(a);
for(int i= 0; i < a.length; i++) {
System.out.print(a[i]+ " ");
}
System.out.println();
System.out.println();
int a2[]= new int[] { -9, -3, -10, -4, -2 };
functionOfA(a2);
for(int i2 = 0; i2 < a2.length; i2++) {
System.out.print(a2[i2]+ " ");
}
}
}
顺便说一下这是给定的:
int x = MAXINT; int y = MAXINT; int i = 0;
int a[n];
while (i != n) {
y = min(y + a[i], a[i]);
x = min(x, y);
i = i + 1;
}
答案 0 :(得分:4)
输出是负数,等于连续负数的最大(绝对值)总和
-1, -1, -1, 5, 4, 3, -10 -> -10
-3, -4, -5, 5, 4, 3, -10 -> -12
至于为什么有人这样做,我不知道。项目欧拉?
答案 1 :(得分:1)
在我看来,函数正在以尽可能少的总和来搜索子序列。
编辑@Thomas:关闭,但总和的子序列可能包含正数。例如,稍微修改一个示例(-3,-4,-5,5,4,3,-10 =&gt; -12):-3,-4,-5,5,4,-10 =&gt; ; -13(整个数组的总和)。
答案 2 :(得分:0)
我认为方法functionOfA试图确定数组a []
中的最小值答案 3 :(得分:0)
使用此输入:
int [] a = {-1,2,3,777,-777,-20,30,90,0,0,0,0,0,0,0,0,8,8,8,8,8,0,1,1,1,1,1,1,1,1,1,1,1,1,1};
您的计划产生:
x: -1 y: -1
x: -1 y: 1
x: -1 y: 3
x: -1 y: 777
x: -777 y: -777
x: -797 y: -797
x: -797 y: -767
x: -797 y: -677
x: -797 y: -677
x: -797 y: -677
x: -797 y: -677
x: -797 y: -677
x: -797 y: -677
x: -797 y: -677
x: -797 y: -677
x: -797 y: -677
x: -797 y: -669
x: -797 y: -661
x: -797 y: -653
x: -797 y: -645
x: -797 y: -637
x: -797 y: -637
x: -797 y: -636
x: -797 y: -635
x: -797 y: -634
x: -797 y: -633
x: -797 y: -632
x: -797 y: -631
x: -797 y: -630
x: -797 y: -629
x: -797 y: -628
x: -797 y: -627
x: -797 y: -626
x: -797 y: -625
x: -797 y: -624
-797 -624
对我毫无意义......