簡體   English   中英

添加 each(3) 數組中的元素,如果總和不相等,則刪除數組中具有最高總和的最后一個元素

[英]To add the elements in each(3) arrays and if the sum is not equal ,delete the the last element from the array which has Highest sum

我有三個數組,我將添加其中的所有元素。 如果三個數組中元素的總和相等,即 s1=s2=s3 ,則滿足條件。 否則我們需要從數組中刪除最后一個總和最大的值,然后再次對所有三個數組求和以檢查數組的所有和是否相等。 這個過程應該重復,直到條件得到滿足。 請幫我解決這個問題。 我的Java代碼是:

import java.util.*;
public class Main{

public static void main(String[] args) 
{
    int n1, n2 , n3, i;
    int count=0;

    Scanner s = new Scanner(System.in);
    n1=s.nextInt();
    n2=s.nextInt();
    n3=s.nextInt();
    int[] arr1=new int[n1];
    int[] arr2=new int[n2];
    int[] arr3=new int[n3];
    for(i=0;i<n1;i++) 
        arr1[i]=s.nextInt();
    for(i=0;i<n2;i++) 
        arr2[i]=s.nextInt();
    for(i=0;i<n3;i++) 
        arr3[i]=s.nextInt();
    int sum1=0,sum2=0,sum3=0;
    for(int j=0;j<3;j++) {
    for(i=0;i<n1;i++) {
        sum1+=arr1[i];
    }
    for(i=0;i<n2;i++) {
        sum2+=arr2[i];
    }
    for(i=0;i<n3;i++) {
        sum3+=arr3[i];
    }
    for(i=0;i<3;i++) {
    if(sum1==sum2&&sum2==sum3) {
        count++;
    }
    else {
        if(sum1>sum2&&sum1>sum3) {
            arr1[n1-1]=0;
            n1--;
        }
        if(sum2>sum1&&sum2>sum3) {
            arr2[n2-1]=0;
            n2--;
        }
        if(sum3>sum1&&sum3>sum2) {
            arr3[n3-1]=0;
            n3--;
        }

    }

}
}
    if(count>0)
        System.out.println("Condtion Satisfied");
}
}

試試這個邏輯,我現在沒有好的編譯器,但如果你遇到問題,請嘗試評論

import java.util.*;
public class Main{

public static void main(String[] args) 
{
    int n1, n2 , n3, i;
    int count=0;
    int sum1=0,sum2=0,sum3=0;

    Scanner s = new Scanner(System.in);
    n1=s.nextInt();
    n2=s.nextInt();
    n3=s.nextInt();

    int[] arr1=new int[n1];
    int[] arr2=new int[n2];
    int[] arr3=new int[n3];

    for(i=0;i<n1;i++) 
        arr1[i]=s.nextInt();
    for(i=0;i<n2;i++) 
        arr2[i]=s.nextInt();
    for(i=0;i<n3;i++) 
        arr3[i]=s.nextInt();

    while(count==0){    

    for(i=0;i<n1;i++) {
        sum1+=arr1[i];
    }
    for(i=0;i<n2;i++) {
        sum2+=arr2[i];
    }
    for(i=0;i<n3;i++) {
        sum3+=arr3[i];
    }

    if(sum1==sum2&&sum2==sum3) {
        count++;
    }
    else {
        if(sum1>sum2&&sum1>sum3) {
            arr1[n1-1]=0;
        }
        if(sum2>sum1&&sum2>sum3) {
            arr2[n2-1]=0;
        }
        if(sum3>sum1&&sum3>sum2) {
            arr3[n3-1]=0;
        }

    }
}
    if(count>0){
        System.out.println("Condtion Satisfied");
    }

}
}

如果我理解正確,這就是您要查找的內容,如果您將三個數組傳遞給它,如果滿足指定的條件(數組中的元素總和相等,如果不從中刪除最后一個元素),此方法將返回 true最大並重新檢查條件)。

public class SumArray {

    public static void main(String[] args) {
        //Cant converge
        int[] arr1={1,2,3,4,5};
        int[] arr2={6,7,8,9};
        int[] arr3={10,11,12,13};
        new SumArray().sumBasedArrayResize(arr1, arr2, arr3);

        //Converge
        int[] arr1={1,2,3,4,5};
        int[] arr2={1,2,3,4,5};
        int[] arr3={1,2,3,4,5};
        new SumArray().sumBasedArrayResize(arr1, arr2, arr3);

    }

    private boolean sumBasedArrayResize(int[] arr1, int[] arr2,int[] arr3) {
        while(true) {
            int sum1 = IntStream.of(arr1).sum();
            int sum2 = IntStream.of(arr2).sum();
            int sum3 = IntStream.of(arr3).sum();
            if (sum1 == sum2 && sum2 == sum3) {
                // ok case
                System.out.println("Sum of arr1 == Sum of arr2 == Sum of arr3");
                return true;
            } else if (arr1.length == 0 || arr2.length == 0 || arr3.length == 0 ) {
                System.out.println(" Cant converge ");
                return false;
            }
            if (sum1 > sum2) {
                if (sum1 > sum3) {
                    //sum1 is large
                    System.out.println("Sum of elements in arr1 is  largest, removing last element from arr1 " + sum1);
                    arr1 = Arrays.copyOf(arr1, arr1.length - 1);
                } else {
                    // sum3 large
                    System.out.println("Sum of elements in arr3 is  largest, removing last element from arr3 " + + sum3);
                    arr3 = Arrays.copyOf(arr3, arr3.length - 1);
                }
            } else {
                if (sum2 > sum3) {
                    //sum2 is large
                    System.out.println("Sum of elements in arr2 is  largest, removing last element from arr2 " +  sum2);
                    arr2 = Arrays.copyOf(arr2, arr2.length - 1);
                } else {
                    // sum3 large
                    System.out.println("Sum of elements in arr3 is  largest, removing last element from arr3 " + + sum3);
                    arr3 = Arrays.copyOf(arr3, arr3.length - 1);
                }
            }

        }
    }
}
     public static void main(String[] args) {

        //sample arrays
        int[] arr1 = {10,20,30};
        int[] arr2 = {20,10,50};
        int[] arr3 = {15,15,10};

        //arrays last index
        int arr1LastIndex = arr1.length - 1;
        int arr2LastIndex = arr2.length - 1;;
        int arr3LastIndex = arr3.length - 1;;

        boolean whileCondition = false;
        boolean result = false;

        while(!whileCondition){

            int sum1 = 0;
            int sum2 = 0;
            int sum3 = 0;

            for(int num : arr1){
                sum1 += num;
            }

            for(int num : arr2){
                sum2 += num;
            }

            for(int num : arr3){
                sum3 += num;
            }

            //check which array sum is largest and make it's last element equal to 0
            if(sum1 > sum2 && sum1 > sum3){
                arr1[arr1LastIndex] = 0;
                arr1LastIndex -= 1;
            }else if(sum2 > sum1 && sum2 > sum3){
                arr2[arr2LastIndex] = 0;
                arr2LastIndex -= 1;
            }else{
                arr3[arr3LastIndex] = 0;
                arr3LastIndex -= 1;
            }

            //checks if all sums are equal
            if(sum1 == sum2 && sum2 == sum3){
                whileCondition = true;
                result = true;
            }

            //checks if the sums we're never equal after going through the whole array
            if(arr1LastIndex < 0 || arr1LastIndex < 0 || arr3LastIndex < 0){
                whileCondition = true;
                result = false;
            }
        }

        if (result){
            System.out.println("Condition was met!");
        }else{
            System.out.println("Condition was NEVER met!");
        }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM