简体   繁体   中英

java tricky questions complete array

An array is defined to be complete if all its elements are greater than 0 and all even numbers that are less than the maximum even number are in the array. For example {2, 3, 2, 4, 11, 6, 10, 9, 8} is complete because

a. all its elements are greater than 0

b.the maximum even integer is 10 c. all even numbers that are less than 10 (2, 4, 6, 8) are in the array.

But {2, 3, 3, 6} is not complete because the even number 4 is missing. {2, 3, 4, 3, 6} is not complete because it contains a negative number. Write a function named isComplete that returns 1 if its array argument is a complete array. Otherwise it returns 0

This is a question i have to solve but i am not able to find good logic for this questions . Here I have find maximum even numbers from the array in first loop and in second loop, i have to check all the even numbers less than the maximum even numbers and i am stuck on this. please help me ,,,,,,,,,,my code is below

public class Complete {
  public static void main(String[] args) {
    System.out.println(isComplete(new int[]{2,3,2,4,11,6,10,9,8}));
    System.out.println(isComplete(new int[]{2,3,3,6}));
    System.out.println(isComplete(new int[]{2,-3,4,3,6}));
  }

  private static int isComplete(int[] i) {
    int set = 1;
    int maxeven = 0;  
    int count = 0;
    for(int a = 0; a < i.length; a++) {
      if(i[a] < 0) {
        set = 0;
          break;
        }
        if(i[a]%2 == 0 && i[a] > maxeven) {
          maxeven = i[a];
        }
     }

     for (int c = 2; c <= maxeven; c=c+2) {
       for( int b = 0; b<i.length; b++) {
         if (c == i[b]) {
           count++;
         }
      }
      if (count > 0) {
        set = 1;
      } else {
        set = 0;
        break;
      }         
    }
    return set;
  }

}

I have find maximum even numbers from the array in first loop and in second loop, i have to check all the even numbers less than the maximum even numbers

I have followed this logic and wrote this. I am checking the validity of condtion 1 (All elements >0) and in the same loop finding the largest even number. In the second loop, I am checking whether all the even numbers lesser than the largest even nuber is present.

public class Complete {
    public static void main(String[] args) {
        System.out.println(isComplete(new int[] { 2, 3, 2, 4, 11, 6, 10, 9, 8 }));
        System.out.println(isComplete(new int[] { 2, 3, 3, 6 }));
        System.out.println(isComplete(new int[] { 2, -3, 4, 3, 6 }));
    }

    private static int isComplete(int[] i) {
        int maxEven = 0;

        for (int element : i) {
            if (element <= 0) {
                return 0;
            }
            if (element % 2 == 0) {
                if (element > maxEven) {
                    maxEven = element;
                }
            }
        }

        for (int a = 2; a < maxEven; a = a + 2) {
            if (!hasElement(i, a)) {
                return 0;
            }
        }
        return 1;
    }

    private static boolean hasElement(int[] i, int a) {
        for (int element : i) {
            if (element == a) {
                return true;
            }
        }
        return false;
    }
}

Set count = 0 in the second loop, like this:

for(int c = 2; c<=maxeven;c=c+2){
    count = 0;
    for(int b = 0;b<i.length;b++){

That should solve your problem. Without count = 0 , count will be >0 after you've looked for "2", so count>0 will be true when you look for "4" even if there are not "4"s.

int isComplete(int[] a) { int max = 0;

for (int el: a) {
    if (el <= 0) {
        return 0;
    }
    if (el % 2 == 0) {
        if (el > max) {
            max = el;
        }
    }
}
int req = (max / 2) - 1;
int p = 0;
for (int c = 2; c < max; c = c + 2) {
    for (int j = 0; j < a.length; j++) {
        if (a[j] == c) {
            p++;
        }
    }
}
if (req == p) {
    return 1;
} else
    return 0;

}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM