Чтобы добавить элементы в каждый (3) массива и, если сумма не равна, удалите последний элемент из массива с наибольшей суммой. - PullRequest
0 голосов
/ 25 января 2019

У меня есть три массива, я добавлю все элементы в нем. Если сумма элементов во всех трех массивах равна, т.е. 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");
}
}

Ответы [ 3 ]

0 голосов
/ 25 января 2019
     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!");
        }
    }
0 голосов
/ 25 января 2019

Попробуйте эту логику, у меня сейчас нет хорошего компилятора, но попробуйте, если у вас проблемы с комментариями вниз

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

}
}
0 голосов
/ 25 января 2019

Если я правильно понял, это то, что вы ищете, этот метод вернет 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);
                }
            }

        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...