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



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

例如:三角形尺寸为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);
    } 
}

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

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

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

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

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演示

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]); 
}

最新更新