{"id":800,"date":"2019-12-05T16:45:19","date_gmt":"2019-12-05T18:45:19","guid":{"rendered":"http:\/\/www.galirows.com.br\/meublog\/programacao\/?p=800"},"modified":"2021-06-18T11:04:00","modified_gmt":"2021-06-18T14:04:00","slug":"questao-simples-mas-que-a-solucao-pode-surpreender","status":"publish","type":"post","link":"http:\/\/www.galirows.com.br\/meublog\/programacao\/questao-simples-mas-que-a-solucao-pode-surpreender\/","title":{"rendered":"Quest\u00e3o simples mas que a solu\u00e7\u00e3o pode surpreender"},"content":{"rendered":"\n<p>A primeira solu\u00e7\u00e3o pensada para um problema normalmente n\u00e3o \u00e9 a melhor. O enunciado a seguir mostra uma problema simples, mas que precisa ser devidamente analisado para encontrar a solu\u00e7\u00e3o em sua totalidade e tamb\u00e9m de forma mais elegante.<\/p>\n\n\n\n<p class=\"has-text-align-center\"> ==================================== <\/p>\n\n\n\n<p>Elabore  um algoritmo em linguagem C que determine e mostre a soma dos n\u00fameros inteiros  \u00edmpares m\u00faltiplos de 3 em um intervalo entre zero e um n\u00famero informado  pelo usu\u00e1rio.<br><br>Por exemplo, do n\u00famero zero at\u00e9 o n\u00famero 10, os n\u00fameros \u00edmpares e que  tamb\u00e9m s\u00e3o m\u00faltiplos de 3 s\u00e3o os n\u00fameros 3 e 9 e cujo a soma dos dois  valores resulta em 12.<\/p>\n\n\n\n<p class=\"has-text-align-center\">====================================<\/p>\n\n\n\n<p>Um primeiro pensamento para resolver essa quest\u00e3o normalmente envolve pegar cada valor do intervalo entre zero e o n\u00famero informado e testar se ele \u00e9 \u00edmpar (seu resto da divis\u00e3o pelo n\u00famero dois \u00e9 igual a um), ou se ele \u00e9 m\u00faltiplo de tr\u00eas (seu resto da divis\u00e3o pelo n\u00famero 3 \u00e9 igual a zero). O trecho de c\u00f3digo a seguir implementa esse racioc\u00ednio.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"c\" class=\"language-c\">for (i = 0; i &lt;= num; i++) {\n    if (i%2==1 &amp;&amp; i%3==0) {\n         soma+=i;\n    }\n}<\/code><\/pre>\n\n\n\n<p>Um pequeno detalhe e que, embora ter\u00e1 pouco impacto no custo computacional, acho importante comentar: por mais que o intervalo seja entre zero \u00e9 um n\u00famero informado, o primeiro valor que ser\u00e1 \u00edmpar e m\u00faltiplo de tr\u00eas \u00e9 o n\u00famero tr\u00eas e por isso n\u00e3o \u00e9 necess\u00e1rio inicializar a vari\u00e1vel de controle do la\u00e7o <em>for<\/em> com zero, sendo melhor fazer a inicializa\u00e7\u00e3o com o valor tr\u00eas, ou seja, <em>for (i = 3; i &lt;= num; i++)<\/em>.<\/p>\n\n\n\n<p>Um aspecto realmente significativo na solu\u00e7\u00e3o e que ter\u00e1 um impacto mais significativo no custo computacional \u00e9 que existe um incremento fixo entre os valores que obedecem as duas condi\u00e7\u00f5es apresentadas no problema. Observe que os valores 3, 9, 15, 21, 27 (todos \u00edmpares e m\u00faltiplos de tr\u00eas) possuem uma diferen\u00e7a de 6 unidades com rela\u00e7\u00e3o ao seu sucessor. A codifica\u00e7\u00e3o dessa solu\u00e7\u00e3o \u00e9 mostrada no c\u00f3digo abaixo.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"c\" class=\"language-c\">#include &lt;stdio.h&gt;\n#include &lt;stdlib.h&gt;\n \nint main() {\n    int soma = 0, i, num;\n    scanf(\"%i\", &amp;num);\n\n    for (i = 3; i &lt;= num; i=i+6) { \/\/realiza incremento com passo 6\n        printf(\"%i \", i);\n        soma+=i;\n    }\n\n    printf(\"\\nSoma: %i\", soma); \n    return 0;\n}<\/code><\/pre>\n\n\n\n<p>\u00c9 importante tamb\u00e9m perceber no enunciado desta quest\u00e3o que ele n\u00e3o restringiu apenas para o intervalo de n\u00fameros  positivos. Supondo que seja fornecido o n\u00famero -10, ent\u00e3o deve ser  considerado os n\u00fameros negativos no intervalo decrescente entre zero e dez negativo. <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"c\" class=\"language-c\">#include &lt;stdio.h&gt;\n#include &lt;stdlib.h&gt;\n \nint main() {\n    int soma = 0, i, num;\n    scanf(\"%i\", &amp;num);\n    if (num &gt; 0) {\n        for (i = 3; i &lt;= num; i=i+6) {\n            printf(\"%i \", i);\n            soma+=i;\n        }\n    } else {\n        for (i = -3; i &gt;= num; i=i-6) {\n            printf(\"%i \", i);\n            soma+=i;\n        }\n    }\n    printf(\"\\nSoma: %i\", soma); \n    return 0;\n}<\/code><\/pre>\n\n\n\n<p>Teste o c\u00f3digo em <a href=\"https:\/\/ideone.com\/gYWRUF\">https:\/\/ideone.com\/gYWRUF<\/a><\/p>\n\n\n\n<p>Fica evidente que, se a pessoa n\u00e3o considerar a possibilidade de entrada de um n\u00famero negativo, sua solu\u00e7\u00e3o n\u00e3o estar\u00e1 completa. A solu\u00e7\u00e3o tamb\u00e9m mostra que, se o programador pensar melhor em sua solu\u00e7\u00e3o , o algoritmo desenvolvido pode reduzir seu custo computacional.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>A primeira solu\u00e7\u00e3o pensada para um problema normalmente n\u00e3o \u00e9 a melhor. O enunciado a seguir mostra uma problema simples, mas que precisa ser devidamente analisado para encontrar a solu\u00e7\u00e3o em sua totalidade e tamb\u00e9m de forma mais elegante. ==================================== Elabore um algoritmo em linguagem C que determine e mostre a soma dos n\u00fameros inteiros [&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":[3,58],"tags":[36,37],"class_list":["post-800","post","type-post","status-publish","format-standard","hentry","category-c","category-codigo-com-analise","tag-for","tag-if"],"aioseo_notices":[],"amp_enabled":true,"_links":{"self":[{"href":"http:\/\/www.galirows.com.br\/meublog\/programacao\/wp-json\/wp\/v2\/posts\/800","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=800"}],"version-history":[{"count":7,"href":"http:\/\/www.galirows.com.br\/meublog\/programacao\/wp-json\/wp\/v2\/posts\/800\/revisions"}],"predecessor-version":[{"id":1036,"href":"http:\/\/www.galirows.com.br\/meublog\/programacao\/wp-json\/wp\/v2\/posts\/800\/revisions\/1036"}],"wp:attachment":[{"href":"http:\/\/www.galirows.com.br\/meublog\/programacao\/wp-json\/wp\/v2\/media?parent=800"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.galirows.com.br\/meublog\/programacao\/wp-json\/wp\/v2\/categories?post=800"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.galirows.com.br\/meublog\/programacao\/wp-json\/wp\/v2\/tags?post=800"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}