Pular para o conteúdo principal

Questão de TI - Desenvolvimento de Sistemas — Códigos em Java — CESGRANRIO 2022

TI - Desenvolvimento de SistemasCódigos em Java
Código
cg056605
Banca
CESGRANRIO
Órgão
BASA
Ano
2022
Cargo
Tec Cien ( )

Sejam dois arrays de inteiros, com zero ou mais elementos cada, ordenados ascendentemente. Deseja-se escrever uma função que receba esses dois arrays como parâmetros e insira os seus elementos em um terceiro array, também recebido como parâmetro, de modo que os elementos inseridos no terceiro array permaneçam ordenados ascendentemente, como no exemplo abaixo.

 

Exemplo:

int v1[]={10,20,30,40,50};

int v2[]={5,10,15,20};

 

O conteúdo do terceiro array, após a chamada da função de intercalação, será

 

{5,10,10,15,20,20,30,40,50}

 

Nesse contexto, considere a seguinte função main de um programa Java:

 

public class Main {

    public static void main(String[] args) {

         int v1[]={10,20,30,40,50};

         int v2[]={5,10,15,20};

         int v3[]=new int [v1.length + v2.length];

         int p1=0,p2=0,p3=0;

 

         intercala(v1,p1,v2,p2,v3,p3);

   }

}

 

Qual função deve ser inserida na classe Main para que a intercalação do array v1 com o array v2 seja feita corretamente?

  1. Astatic void intercala(int v1[],int p1,int v2[],int p2,int v3[],int p3) {            if(p1 == v1.length && p2 == v2.length)                  return;            if(v1[p1] < v2[p2]) {                 v3[p3++]=v1[p1++];                 intercala(v1,p1,v2,p2,v3,p3);           }          else {               v3[p3++]=v2[p2++];              intercala(v1,p1,v2,p2,v3,p3);         } }
  2. Bstatic void intercala(int v1[],int p1,int v2[],int p2,int v3[],int p3) {            if(p1 == v1.length && p2 == v2.length)                 return;           if(p1 < v1.length)                 if(p2 < v2.length)                      if(v1[p1] < v2[p2]) {                           v3[p3++]=v1[p1++];                            intercala(v1,p1,v2,p2,v3,p3);                    }                   else {                        v3[p3++]=v2[p2++];                        intercala(v1,p1,v2,p2,v3,p3);                 }            else {                 v3[p3++]=v1[p1++];                  ntercala(v1,p1,v2,p2,v3,p3);           }      else          if(p2 < v2.length) {                v3[p3++]=v2[p2++];                intercala(v1,p1,v2,p2,v3,p3);         } }
  3. Cstatic void intercala(int v1[],int p1,int v2[],int p2,int v3[],int p3) {           if(p1 < v1.length && p2 < v2.length)                 intercala(v1,p1+1,v2,p2+1,v3,p3+1);           else                if(p1 < v1.length && p2 == v2.length)                      intercala(v1,p1+1,v2,p2,v3,p3+1);                else                     if(p1 == v1.length && p2 < v2.length)                           intercala(v1,p1,v2,p2+1,v3,p3+1);                     else                          return;         if(p1 < v1.length)               if(p2 < v2.length)                    if(v1[p1] < v2[p2])                         v3[p3]=v1[p1];                    else                         v3[p3]=v2[p2];                else                     v3[p3]=v1[p1];         else             v3[p3]=v2[p2];  }
  4. Dstatic void intercala(int v1[],int p1,int v2[],int p2,int v3[],int p3) {            while(p1 < v1.length && p2 < v2.length)                 if(v1[p1] < v2[p2]) {                      v3[p3]=v1[p1];                      p3+=1;                      p1+=1;                 }                 else                      if(v1[p1] > v2[p2]) {                           v3[p3]=v2[p2];                           p3+=1;                            p2+=1;                 }                 else {                      v3[p3]=v1[p1];                      p1+=1;                      p3+=1;                      v3[p3]=v2[p2];                      p3+=1;                      p2+=1;                 }    }
  5. Estatic void intercala(int v1[],int p1,int v2[],int p2,int v3[],int p3) {           while(p1 < v1.length || p2 < v2.length)                if(v1[p1] < v2[p2]) {                     v3[p3]=v1[p1];                      p3++;                      p1++;                }               else                    if(v1[p1] > v2[p2]) {                         v3[p3]=v2[p2];                          p3++;                          p2++;                    }                   else {                       v3[p3]=v1[p1];                        p1++;                        p3++;                        v3[p3]=v2[p2];                        p3++;                        p2++;                  }  }
Revelar gabarito e comentário

GabaritoB — static void intercala(int v1[],int p1,int v2[],int p2,int v3[],int p3) {            if(p1 == v1.length && p2 == v2.length)                 return;           if(p1 < v1.length)                 if(p2 < v2.length)                      if(v1[p1] < v2[p2]) {                           v3[p3++]=v1[p1++];                            intercala(v1,p1,v2,p2,v3,p3);                    }                   else {                        v3[p3++]=v2[p2++];                        intercala(v1,p1,v2,p2,v3,p3);                 }            else {                 v3[p3++]=v1[p1++];                  ntercala(v1,p1,v2,p2,v3,p3);           }      else          if(p2 < v2.length) {                v3[p3++]=v2[p2++];                intercala(v1,p1,v2,p2,v3,p3);         } }

Link permanente: /questoes/cg056605