![](/img/trans.png)
[英]Make an array with sum of elements equal to a number k from an Vector of arrays
[英]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.