Java: 三角形竖向元素之和

3
我希望您能计算一个三角形所有竖列元素的和,例如,如果三角形是:
例如:三角形大小为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个回答

5

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

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

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

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

你的代码输出结果是: 第0项:12 第1项:9 第2项:23 第3项:13 第4项:5所有列的总和不正确:\ - prateek569
@prateek569 我更新了数组使其包含与你的相同的元素。现在应该没问题了。 - Mohammed Aouf Zouag
不客气。我尽量写了非常简单的代码,让您容易理解它。 - Mohammed Aouf Zouag

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

你真是个天才,从没想过那个 :P - prateek569

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接