我想计算三角形中所有垂直元素的总和,例如,如果三角形是
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);
}
}
答案 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");
}
您只需要警惕锯齿状阵列的不均匀行尺寸