2012-03-14 4 views
1

私は現在、特定のメソッドが何をしているのかを理解しようとしています。それは、ポストコンディションとループ不変条件を提供するために注釈をつけることに進みます。私は考え出した何functionOfA(int a [])は何をしますか?

:正と負のアレイ上

  • 、すべての正xは、最小が発生した最初の時間に正となります。

  • 配列がすべて負の場合、xyは要素の合計です。

誰でもこの方法を分析する別のアプローチを参照してください。あなたの時間をありがとう。

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; 
} 
+3

この機能を書いた人は誰でも、撮影して、撮影しておく必要があります。入力やオーバーフロー(そうでなければ何が起きるか分かっている)のために、MAXINTは決して起こり得ないと仮定すると、一見すると配列のすべての負の数を基本的に合計すると思う。 – Voo

+0

宿題私は推測する? – kmarks2

+0

私は宿題の上で研究学術のコードに賭けています。ひどいやり方で意味をなさない仕事をしますか?これはライブシステムの生産コードですが... – Thomas

答えて

0

私は方法functionOfAは、配列[]

で最小値を決定しようとしていることを考えます
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 

は私には意味がありません...

4

出力が最大(絶対値)に等しい負の数の連続した負の数の和である

-1, -1, -1, 5, 4, 3, -10 -> -10 
-3, -4, -5, 5, 4, 3, -10 -> -12 

誰かがそれをする理由については分かりません。プロジェクトオイラー?

1

関数が最低限の合計で部分列を検索しているように見えます。

編集@Thomas:閉じるが、合計される部分列には正の数が含まれる場合があります。たとえば、-3、-4、-5、5、4、3、-10 => -12のいずれかの例を少し変更します。-3、-4、-5、5、4、-10 => - 13(配列全体の合計)。

関連する問題