{"id":1173,"date":"2021-08-31T11:19:28","date_gmt":"2021-08-31T14:19:28","guid":{"rendered":"http:\/\/www.galirows.com.br\/meublog\/programacao\/?p=1173"},"modified":"2021-09-01T10:17:35","modified_gmt":"2021-09-01T13:17:35","slug":"solicitacao-de-algoritmo-7","status":"publish","type":"post","link":"http:\/\/www.galirows.com.br\/meublog\/programacao\/solicitacao-de-algoritmo-7\/","title":{"rendered":"Solicita\u00e7\u00e3o de algoritmo 7"},"content":{"rendered":"\n<p>A solicita\u00e7\u00e3o foi realizada por Bruna Vit\u00f3ria Chaga, que faz uso de uma plataforma que achei bastante interessante para treinar a resolu\u00e7\u00e3o de algoritmos.<\/p>\n\n\n\n<p>Segue o enunciado na plataforma: <a href=\"https:\/\/thehuxley.com\/problem\/5?quizId=6719\">https:\/\/thehuxley.com\/problem\/5?quizId=6719<\/a><\/p>\n\n\n\n<p><strong>Enunciado<\/strong>: no Banco do Brasilo, existem apenas dois caixas para atender as pessoas. Por\u00e9m, toda hora do almo\u00e7o \u00e9 um problema, pois existem duas filas de pessoas e um dos funcion\u00e1rios precisa ir comer. Ent\u00e3o, as duas filas precisam ser integradas. Sempre d\u00e1 confus\u00e3o. Para minimizar o problema, o gerente do banco, muito sovina, ao inv\u00e9s de contratar mais um funcion\u00e1rio, prop\u00f4s a seguinte solu\u00e7\u00e3o. As pessoas da fila do funcion\u00e1rio que foi almo\u00e7ar devem ser intercaladas com as pessoas da fila do funcion\u00e1rio que ficou trabalhando, a partir da segunda posi\u00e7\u00e3o.<\/p>\n\n\n\n<p>Consiste dos inteiros n, m e k (0&lt;=n &lt;=10000, 0&lt;=m &lt;=10000, 1&lt;=k&lt;=2) correspondendo, respectivamente, a quantidade de pessoas que existem em cada fila e qual foi \u00e0 fila que o funcion\u00e1rio foi almo\u00e7ar, sendo k=1 para a primeira fila e k=2 para a segunda fila. Seguidos de n inteiros representando as pessoas da primeira file e m inteiros representando as pessoas da segunda fila. Os inteiros nunca se repetem.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>Entrada<\/td><td>Sa\u00edda<\/td><\/tr><tr><td>3 5 2<br>1<br>2<br>4<br>3<br>10<br>9<br>7<br>6<\/td><td>1<br>3<br>2<br>10<br>4<br>9<br>7<br>6<br><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>A tentativa de resolu\u00e7\u00e3o enviada pela Bruna segue abaixo. <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"c\" class=\"language-c line-numbers\">#include &lt;stdio.h&gt;\n\nint main() {\n    int i=0, k=0;\n    int cont, cont2;\n\n    \/\/leitura dos valores\n    scanf(\"%d %d %d\", &amp;cont, &amp;cont2, &amp;k);\n    int vet1[cont], vet2[cont2], vet3[cont+cont2];\n    for (i=0; i&lt;cont; i++){\n        scanf(\"%d\", &amp;vet1[i]);\n    }\n    for (i=0; i&lt;cont2; i++){\n        scanf(\"%d\", &amp;vet2[i]);\n    }\n    \n    int p=0;\n    for (i=0; i&lt;cont; i++){\n       vet3[p] = vet1[i];\n       p = p + 2;\n    }\n    p=1;\n    for (i=0; i&lt;cont2; i++){\n       vet3[p] = vet1[i];\n       p = p +2;\n    }\n    \n    \/\/escrita da sa\u00edda\n    for (i=0; i&lt;cont+cont2; i++){\n       printf(\"%d\\n\", vet3[i]);\n    }\n\n    return 0;\n}<\/code><\/pre>\n\n\n\n<p>A leitura de valores e escrita da sa\u00edda est\u00e3o corretas. Veja que os vetores foram definidos na linha 9 e apenas depois de ler os valores que s\u00e3o necess\u00e1rios para definir o tamanho dos vetores.<\/p>\n\n\n\n<p>Entre as linhas 17 e 26 \u00e9 que se encontra a solu\u00e7\u00e3o para o problema, sendo realizada a intercala\u00e7\u00e3o dos dois vetores com os dados, para um terceiro vetor.<\/p>\n\n\n\n<p>A ideia aplicada est\u00e1 correta, mas um pequeno equ\u00edvoco atrapalhou demais entender o problema. Na linha 24, possivelmente por causa do copia e cola, est\u00e1 sendo utilizado novamente o primeiro vetor, ao inv\u00e9s do segundo vetor. Ou seja, a linha 24 deveria ser vet3[p] = vet1[i];<\/p>\n\n\n\n<p>Mesmo com essa corre\u00e7\u00e3o, o problema ainda n\u00e3o est\u00e1 resolvido. Se ambas as filas tivessem o mesmo tamanho esse exerc\u00edcio seria simples e estaria conclu\u00eddo, mas como as filas possuem tamanho diferente, \u00e9 necess\u00e1rio considerar isso, uma vez que o incremento n\u00e3o ser\u00e1 sempre de duas em duas unidades.<\/p>\n\n\n\n<p>Observando os dados de entrada de exemplo, onde a segunda fila \u00e9 maior do que a primeira, isso me leva a alterar o trecho de c\u00f3digo entre as linhas 22-26, substituindo\/complementando com o trecho a seguir. Ou seja, com a minha especifica\u00e7\u00e3o, se a primeira fila j\u00e1 terminou, ent\u00e3o somente ser\u00e3o colocadas as pessoas da segunda fila e por isso o incremento deve ser unit\u00e1rio, n\u00e3o mais de dois em dois.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"c\" class=\"language-c\">    p=1;\n    for (i=0; i&lt;cont2; i++){\n       vet3[p] = vet2[i];\n       if (i &lt; cont-1) {\n    \t p = p + 2;\n       } else {\n       \t p++;\n       }\n    }<\/code><\/pre>\n\n\n\n<p>Veja que algo similar deve ser feito para o trecho entre as linhas 17-21, para caso a primeira fila seja maior do que a segunda.<\/p>\n\n\n\n<p>Al\u00e9m de levar em considera\u00e7\u00e3o se uma fila \u00e9 maior do que a outra, o c\u00f3digo da Bruna tamb\u00e9m n\u00e3o levou em considera\u00e7\u00e3o de qual fila saiu o funcion\u00e1rio. Veja que a informa\u00e7\u00e3o do <em>k<\/em> n\u00e3o \u00e9 levada em considera\u00e7\u00e3o na avalia\u00e7\u00e3o. Essa informa\u00e7\u00e3o \u00e9 importante para determinar o valor inicial da vari\u00e1vel <em>p<\/em> nas linhas 17 e 22 do c\u00f3digo inicial da Bruna.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"c\" class=\"language-c line-numbers\">#include &lt;stdio.h&gt;\n\nint main() {\n    int i=0, k=0, p;\n    int cont, cont2;\n\n\t\/\/leitura dos valores\n    scanf(\"%d %d %d\", &amp;cont, &amp;cont2, &amp;k);\n    int vet1[cont], vet2[cont2], vet3[cont+cont2];\n    for (i=0; i&lt;cont; i++){\n        scanf(\"%d\", &amp;vet1[i]);\n    }\n    for (i=0; i&lt;cont2; i++){\n        scanf(\"%d\", &amp;vet2[i]);\n    }\n    \n    if (k == 2) {\n        p=0;\n    } else {\n        p=1;\n    }\n    for (i=0; i&lt;cont; i++){\n       vet3[p] = vet1[i];\n       if (i &lt; cont2-1) {\n    \t p = p + 2;\n       } else {\n       \t p++;\n       }\n    }\n    if (k == 2) {\n        p=1;\n    } else {\n        p=0;\n    }\n    for (i=0; i&lt;cont2; i++){\n       vet3[p] = vet2[i];\n       if (i &lt; cont) {\n    \t p = p + 2;\n       } else {\n       \t p++;\n       }\n    }\n    \n    \/\/escrita da sa\u00edda\n    for (i=0; i&lt;cont+cont2; i++){\n       printf(\"%d\\n\", vet3[i]);\n    }\n\n    return 0;\n}<\/code><\/pre>\n\n\n\n<p>Nesse problema \u00e9 preciso considerar 2 itens: (1) a primeira fila deve se juntar a segunda, ou a segunda fila deve se juntar com a primeira; (2) a primeira fila \u00e9 maior do que segunda, ou a segunda fila \u00e9 maior do que a primeira. A combina\u00e7\u00e3o desses itens geram quatro possibilidades. Meu c\u00f3digo ainda n\u00e3o est\u00e1 completamente correto, sendo que ele n\u00e3o funciona corretamente na condi\u00e7\u00e3o na qual: a segunda fila deve se juntar com a primeira, sendo que a segunda fila \u00e9 a maior. <\/p>\n\n\n\n<p>N\u00e3o vou alterar o algoritmo para deixar ele 100% para n\u00e3o atrapalhar a proposta pedag\u00f3gica do ambiente <a rel=\"noreferrer noopener\" href=\"https:\/\/thehuxley.com\" data-type=\"URL\" data-id=\"https:\/\/thehuxley.com\" target=\"_blank\">Thehuxley<\/a>. Mas acho interessante observar que, se for retirado o -1 da condi\u00e7\u00e3o da linha 24, isso altera em que condi\u00e7\u00f5es o c\u00f3digo ir\u00e1 funcionar, assim como se adicionar o -1 na condi\u00e7\u00e3o da linha 37, o c\u00f3digo funcionar\u00e1 em outra condi\u00e7\u00e3o.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>A solicita\u00e7\u00e3o foi realizada por Bruna Vit\u00f3ria Chaga, que faz uso de uma plataforma que achei bastante interessante para treinar a resolu\u00e7\u00e3o de algoritmos. Segue o enunciado na plataforma: https:\/\/thehuxley.com\/problem\/5?quizId=6719 Enunciado: no Banco do Brasilo, existem apenas dois caixas para atender as pessoas. Por\u00e9m, toda hora do almo\u00e7o \u00e9 um problema, pois existem duas filas [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[5],"tags":[52,14],"class_list":["post-1173","post","type-post","status-publish","format-standard","hentry","category-python","tag-solicitacao-de-algoritmo","tag-vetor"],"aioseo_notices":[],"amp_enabled":true,"_links":{"self":[{"href":"http:\/\/www.galirows.com.br\/meublog\/programacao\/wp-json\/wp\/v2\/posts\/1173","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.galirows.com.br\/meublog\/programacao\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.galirows.com.br\/meublog\/programacao\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.galirows.com.br\/meublog\/programacao\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.galirows.com.br\/meublog\/programacao\/wp-json\/wp\/v2\/comments?post=1173"}],"version-history":[{"count":7,"href":"http:\/\/www.galirows.com.br\/meublog\/programacao\/wp-json\/wp\/v2\/posts\/1173\/revisions"}],"predecessor-version":[{"id":1181,"href":"http:\/\/www.galirows.com.br\/meublog\/programacao\/wp-json\/wp\/v2\/posts\/1173\/revisions\/1181"}],"wp:attachment":[{"href":"http:\/\/www.galirows.com.br\/meublog\/programacao\/wp-json\/wp\/v2\/media?parent=1173"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.galirows.com.br\/meublog\/programacao\/wp-json\/wp\/v2\/categories?post=1173"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.galirows.com.br\/meublog\/programacao\/wp-json\/wp\/v2\/tags?post=1173"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}