java:三角形中垂直元素的总和

时间:2015-11-14 08:34:50

标签: java

我想计算三角形中所有垂直元素的总和,例如,如果三角形是

Ex:三角形尺寸为5

1
2 2
5 2 2
2 0 5 8
8 7 9 4 5

那么总和应该是

Sum1 = 1+2+5+2+8 = 18 (Sum of vertical elements from the first column)
Sum2 = 2+2+0+7 = 11
Sum3 = 2+5+9 = 16
Sum4 = 8+4=  12
Sum5 = 5 = 5

注意:三角形大小会有所不同,元素也会随机。

我编写的程序,但它只计算第一行我如何计算和存储第二,第三和最后一行?

public class fsdhs 
{
    public static void main(String args[])
    {
        int arr[]={1,2,2,5,2,2,2,0,5,8,8,7,9,4,5};
        int x,y,count=0,size=5,sum=0;
        boolean flag=false;
        for(x=0;x<size;x++)
        {
            for(y=0;y<=x;y++)
               {
                if(flag==false)
                {
                    sum=sum+arr[count];
                    flag=true;
                }
                 System.out.print(arr[count]+" ");
                 count++;
               }            
               System.out.print("\n");
               flag=false;
        }
        System.out.print("\nSum1="+sum);
    } 
}

3 个答案:

答案 0 :(得分:5)

您可以使用以下公式简化代码并计算总和,以获得三角形和第j列中第i行索引的数组索引(j <= i,从零开始):

index = i*(i+1)/2 + j

例如,在行i = 3的给定三角形中,列j = 2的值为5,因此 index = 3 * 4/2 + 2 = 8,arr [8]也是5

答案 1 :(得分:2)

int SIZE = 5; // The size of your triangle
int arr[]={1,2,5,2,8,2,2,0,7,2,5,9,8,4,5}; // Array of triangle items
int[] sums = new int[SIZE];

for (int i = 0; i < arr.length; i += SIZE, SIZE--) {
    for(int j = i; j < i + SIZE; j++) {
        sums[sums.length - SIZE] += arr[j];
    }
}

// Show items
for (int i = 0; i < sums.length; i++) {
    System.out.println("item " + i + ": " + sums[i]); 
}

答案 2 :(得分:2)

更直观的方法可能是使用多维锯齿状阵列来存储三角形数据。这样,您可以直接推理坐标而无需计算基于行的偏移:

int arr[][]={{1},{2,2},{5,2,2},{2,0,5,8},{8,7,9,4,5}};

int size=5;

for(int x=0; x < size; x++)
{
    int sum = 0;
    for(int y=x; y < size; y++)
    {
        sum += arr[y][x];
    }
    System.out.println("Column " + x + " Sum=" + sum + "\n");
}

您只需要警惕锯齿状阵列的不均匀行尺寸

IdeOne Demo