{"id":572,"date":"2005-02-27T12:00:00","date_gmt":"2005-02-27T19:00:00","guid":{"rendered":"http:\/\/kodegeek.com\/blog\/?p=572"},"modified":"2005-02-27T12:00:00","modified_gmt":"2005-02-27T19:00:00","slug":"echando-codigo-%c2%bfcomo-obtener-un-numero-de-una-secuencia-rapidamente","status":"publish","type":"post","link":"http:\/\/kodegeek.com\/blog\/2005\/02\/27\/echando-codigo-%c2%bfcomo-obtener-un-numero-de-una-secuencia-rapidamente\/","title":{"rendered":"Echando c\u00f3digo: \u00bfComo obtener un n\u00famero de una secuencia, r\u00e1pidamente?"},"content":{"rendered":"<p>Les tengo un problemita: Suponga que a usted le dan una secuencia desordenada de n\u00fameros (<span style=\"font-style: italic;\">un arreglo de enteros<\/span>), desde el 1 hasta el 1000, con uno de ellos perdido en la secuencia. Le piden (si, siempre alguien le pide algo ;)) que diga que n\u00famero est\u00e1 perdido. Obviamente puede utilizar la computadora, pero tiene una restricci\u00f3n: <span style=\"font-style: italic;\">No puede crear estructura de datos adicionales, como por ejemplo la lista de n\u00fameros ordenada para buscar el n\u00famero perdido.<br \/><\/span><br \/>\u00bfPiensa que es in\u00fatil?. Pienselo otra vez, esto lo preguntan en entrevistas de vez en cuando y no es tan dificil de resolver.<\/p>\n<p><span style=\"font-style: italic;\">Una pista<\/span>: Una forma de resolverlo ser\u00eda marcar que n\u00fameros est\u00e1n en la secuencia, para luego volver a revisar (esta vez contando desde 1 hasta 1000) y as\u00ed ver quien falta. Sin embargo esto es muy ineficiente ya que hay que contar dos veces, adem\u00e1s de hay que almacenar que n\u00fameros fueron visitados.<br \/><span style=\"font-style: italic;\">Pista dos<\/span>: Empiece con una lista m\u00e1s peque\u00f1a, a ver si logra obtener un algoritmo.<\/p>\n<p>No siga leyendo, pienselo un poco m\u00e1s&#8230;<\/p>\n<p>OK, ya se rindio. Que chimbo :). Bueno, la soluci\u00f3n es simple: Usted puede saber cual es la suma teorica de todos los n\u00fameros de 1 hasta 1000, y si usted suma la secuencia que le dieron y resta ambas sumas entonces all\u00ed est\u00e1 su n\u00famero. Para optimizar m\u00e1s el algoritmo, usted puede calcular la suma de una secuencia conocida con la siguente formula:<\/p>\n<blockquote><p>suma = n(n+1)\/2, donde n es el n\u00famero m\u00e1s grande de la secuencia.<\/p><\/blockquote>\n<p>As\u00ed, para n=1000 tenemos que suma = 500000.<\/p>\n<p>Aqui le dejo un pedazo de c\u00f3digo en Java (la l\u00f3gica es la misma en cualquier lenguaje):<\/p>\n<style type=\"text\/css\"><!-- .syntax0 { color: #000000; } .syntax1 { color: #cc0000; } .syntax2 { color: #ff8400; } .syntax3 { color: #6600cc; } .syntax4 { color: #cc6600; } .syntax5 { color: #ff0000; } .syntax6 { color: #9966ff; } .syntax7 { background: #ffffcc; color: #ff0066; } .syntax8 { color: #006699; font-weight: bold; } .syntax9 { color: #009966; font-weight: bold; } .syntax10 { color: #0099ff; font-weight: bold; } .syntax11 { color: #66ccff; font-weight: bold; } .syntax12 { color: #02b902; } .syntax13 { color: #ff00cc; } .syntax14 { color: #cc00cc; } .syntax15 { color: #9900cc; } .syntax16 { color: #6600cc; } .syntax17 { color: #0000ff; } .syntax18 { color: #000000; font-weight: bold; } .gutter { background: #dbdbdb; color: #000000; } .gutterH { background: #dbdbdb; color: #990066; } --><br \/><\/style>\n<p><\/p>\n<pre><span class=\"gutter\">   1:<\/span><span class=\"syntax3\">\/**<\/span><br \/><span class=\"gutter\">   2:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">This<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">program<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">shows<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">how<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">to<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">find<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">a<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">missing<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">number<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">on<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">a<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">sequence<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">of<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">numbers<\/span><br \/><span class=\"gutter\">   3:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax12\">@author<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">Jose<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">V<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">Nunez<\/span><br \/><span class=\"gutter\">   4:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax12\">@version<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">0<\/span><span class=\"syntax3\">.<\/span><span class=\"syntax3\">1<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">-<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">02<\/span><span class=\"syntax3\">\/<\/span><span class=\"syntax3\">27<\/span><span class=\"syntax3\">\/<\/span><span class=\"syntax3\">2005<\/span><br \/><span class=\"gutterH\">   5:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">License<\/span><span class=\"syntax3\">:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">GPL<\/span><br \/><span class=\"gutter\">   6:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">Blog<\/span><span class=\"syntax3\">:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">El<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">Angel<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">Negro<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">-<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">http<\/span><span class=\"syntax3\">:<\/span><span class=\"syntax3\">\/<\/span><span class=\"syntax3\">\/<\/span><span class=\"syntax3\">elangelnegro<\/span><span class=\"syntax3\">.<\/span><span class=\"syntax3\">blogspot<\/span><span class=\"syntax3\">.<\/span><span class=\"syntax3\">com<\/span><br \/><span class=\"gutter\">   7:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*\/<\/span><br \/><span class=\"gutter\">   8:<\/span><br \/><span class=\"gutter\">   9:<\/span><span class=\"syntax9\">import<\/span> java.util.Random;<br \/><span class=\"gutterH\">  10:<\/span><span class=\"syntax9\">import<\/span> java.util.ArrayList;<br \/><span class=\"gutter\">  11:<\/span><br \/><span class=\"gutter\">  12:<\/span><span class=\"syntax8\">public<\/span> <span class=\"syntax10\">class<\/span> FindNumber <span class=\"syntax18\">{<\/span><br \/><span class=\"gutter\">  13:<\/span>    <br \/><span class=\"gutter\">  14:<\/span>        <span class=\"syntax8\">public<\/span> <span class=\"syntax8\">static<\/span> <span class=\"syntax8\">final<\/span> <span class=\"syntax10\">int<\/span> MAX_NUMBERS <span class=\"syntax18\">=<\/span> <span class=\"syntax5\">1000<\/span>;<br \/><span class=\"gutterH\">  15:<\/span><br \/><span class=\"gutter\">  16:<\/span>        <span class=\"syntax3\">\/**<\/span><br \/><span class=\"gutter\">  17:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">Command<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">line<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">processing<\/span><br \/><span class=\"gutter\">  18:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax12\">@param<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">args<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">-<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">ignored<\/span><br \/><span class=\"gutter\">  19:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">@throw<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">Throwable<\/span><br \/><span class=\"gutterH\">  20:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*\/<\/span><br \/><span class=\"gutter\">  21:<\/span>        <span class=\"syntax8\">public<\/span> <span class=\"syntax8\">static<\/span> <span class=\"syntax8\">final<\/span> <span class=\"syntax10\">void<\/span> <span class=\"syntax6\">main<\/span>(String [] args) <span class=\"syntax8\">throws<\/span> Throwable <span class=\"syntax18\">{<\/span><br \/><span class=\"gutter\">  22:<\/span>            <br \/><span class=\"gutter\">  23:<\/span>                Random ran <span class=\"syntax18\">=<\/span> <span class=\"syntax8\">new<\/span> <span class=\"syntax6\">Random<\/span>();<br \/><span class=\"gutter\">  24:<\/span>                Integer [] numbers <span class=\"syntax18\">=<\/span> <span class=\"syntax14\">null<\/span>;<br \/><span class=\"gutterH\">  25:<\/span>                ArrayList list <span class=\"syntax18\">=<\/span> <span class=\"syntax8\">new<\/span> java.util.<span class=\"syntax6\">ArrayList<\/span>(MAX_NUMBERS);<br \/><span class=\"gutter\">  26:<\/span>                <span class=\"syntax2\">\/\/<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">Get<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">a<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">list<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">of<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">unique<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">random<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">numbers<\/span><br \/><span class=\"gutter\">  27:<\/span>                <span class=\"syntax8\">for<\/span> (<span class=\"syntax10\">int<\/span> i<span class=\"syntax18\">=<\/span><span class=\"syntax5\">0<\/span>; i <span class=\"syntax18\">&lt;<\/span> MAX_NUMBERS <span class=\"syntax18\">-<\/span> <span class=\"syntax5\">1<\/span>; i<span class=\"syntax18\">+<\/span><span class=\"syntax18\">+<\/span>) <span class=\"syntax18\">{<\/span><br \/><span class=\"gutter\">  28:<\/span>                        <span class=\"syntax8\">while<\/span> (<span class=\"syntax14\">true<\/span>) <span class=\"syntax18\">{<\/span><br \/><span class=\"gutter\">  29:<\/span>                                Integer num <span class=\"syntax18\">=<\/span> <span class=\"syntax8\">new<\/span> <span class=\"syntax6\">Integer<\/span>(<br \/><span class=\"gutterH\">  30:<\/span>                                        ran.<span class=\"syntax6\">nextInt<\/span>(MAX_NUMBERS) <span class=\"syntax18\">+<\/span> <span class=\"syntax5\">1<\/span>);<br \/><span class=\"gutter\">  31:<\/span>                                <span class=\"syntax8\">if<\/span> (<span class=\"syntax18\">!<\/span> list.<span class=\"syntax6\">contains<\/span>(num)) <span class=\"syntax18\">{<\/span><br \/><span class=\"gutter\">  32:<\/span>                                        list.<span class=\"syntax6\">add<\/span>(num);<br \/><span class=\"gutter\">  33:<\/span>                                        <span class=\"syntax8\">break<\/span>;<br \/><span class=\"gutter\">  34:<\/span>                                <span class=\"syntax18\">}<\/span><br \/><span class=\"gutterH\">  35:<\/span>                        <span class=\"syntax18\">}<\/span><br \/><span class=\"gutter\">  36:<\/span>                <span class=\"syntax18\">}<\/span><br \/><span class=\"gutter\">  37:<\/span>                System.out.<span class=\"syntax6\">println<\/span>(list);<br \/><span class=\"gutter\">  38:<\/span>                <span class=\"syntax10\">long<\/span> teorSum <span class=\"syntax18\">=<\/span> (MAX_NUMBERS <span class=\"syntax18\">*<\/span> (MAX_NUMBERS <span class=\"syntax18\">+<\/span> <span class=\"syntax5\">1<\/span>)) <span class=\"syntax18\">\/<\/span> <span class=\"syntax5\">2<\/span>;<br \/><span class=\"gutter\">  39:<\/span>                <span class=\"syntax10\">long<\/span> realSum <span class=\"syntax18\">=<\/span> <span class=\"syntax5\">0<\/span>;<br \/><span class=\"gutterH\">  40:<\/span>                numbers <span class=\"syntax18\">=<\/span> (Integer []) list.<span class=\"syntax6\">toArray<\/span>(<span class=\"syntax8\">new<\/span> Integer[<span class=\"syntax5\">0<\/span>]);<br \/><span class=\"gutter\">  41:<\/span>                <span class=\"syntax2\">\/\/<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">Now<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">get<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">the<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">sum<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">of<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">the<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">real<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">sequence<\/span><br \/><span class=\"gutter\">  42:<\/span>                <span class=\"syntax10\">int<\/span> len <span class=\"syntax18\">=<\/span> numbers.length;<br \/><span class=\"gutter\">  43:<\/span>                <span class=\"syntax8\">for<\/span> (<span class=\"syntax10\">int<\/span> i <span class=\"syntax18\">=<\/span> <span class=\"syntax5\">0<\/span>; i <span class=\"syntax18\">&lt;<\/span> len ; i<span class=\"syntax18\">+<\/span><span class=\"syntax18\">+<\/span>) <span class=\"syntax18\">{<\/span><br \/><span class=\"gutter\">  44:<\/span>                        realSum <span class=\"syntax18\">+<\/span><span class=\"syntax18\">=<\/span> numbers[i].<span class=\"syntax6\">intValue<\/span>();<br \/><span class=\"gutterH\">  45:<\/span>                <span class=\"syntax18\">}<\/span><br \/><span class=\"gutter\">  46:<\/span>                System.out.<span class=\"syntax6\">println<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">The<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">missing<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">number<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">is:<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">\"<\/span> <span class=\"syntax18\">+<\/span><br \/><span class=\"gutter\">  47:<\/span>                        (teorSum <span class=\"syntax18\">-<\/span> realSum) );<br \/><span class=\"gutter\">  48:<\/span>    <br \/><span class=\"gutter\">  49:<\/span>        <span class=\"syntax18\">}<\/span><br \/><span class=\"gutterH\">  50:<\/span><span class=\"syntax18\">}<\/span><br \/><\/pre>\n<p>Por ejemplo, para revizar una lista de <span style=\"font-style: italic;\">10 n\u00fameros:<\/span><\/p>\n<blockquote><p>[josevnz@localhost test]$ <span style=\"font-style: italic;\">javac FindNumber.java -d .<\/span><br \/>[josevnz@localhost test]$ <span style=\"color: rgb(0, 153, 0);\">java FindNumber<\/span><br \/>[1, 5, 10, 6, 9, 7, 4, 2, 8]<br \/>The missing number is: <span style=\"color: rgb(255, 0, 0);\">3<\/span><br \/>[josevnz@localhost test]$<\/p><\/blockquote>\n<p>Y puede bajarse el c\u00f3digo de <a href=\"http:\/\/prdownloads.sourceforge.net\/elangelnegro\/FindNumber.java?download\">aqui.<\/a><br \/><span style=\"font-style: italic;\"><\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Les tengo un problemita: Suponga que a usted le dan una secuencia desordenada de n\u00fameros (un arreglo de enteros), desde el 1 hasta el 1000, con uno de ellos perdido en la secuencia. Le piden (si, siempre alguien le pide algo ;)) que diga que n\u00famero est\u00e1 perdido. Obviamente puede utilizar la computadora, pero tiene <a class=\"read-more\" href=\"http:\/\/kodegeek.com\/blog\/2005\/02\/27\/echando-codigo-%c2%bfcomo-obtener-un-numero-de-una-secuencia-rapidamente\/\">[&hellip;]<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[],"tags":[],"_links":{"self":[{"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/posts\/572"}],"collection":[{"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/comments?post=572"}],"version-history":[{"count":0,"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/posts\/572\/revisions"}],"wp:attachment":[{"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/media?parent=572"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/categories?post=572"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/tags?post=572"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}