Título: AYUDA CON Inversiones de 1 Publicado por: Pitagoras en 27 Abril 2022, 18:41 pm Buenas, he hecho el codigo en java pero no se como modificar el codigo para que haga las inversiones de 1. Se trata de un codigo divide y venceras donde se me proporciona un .txt o un .dat con un conjunto de numeros de entre los cuales se proporciona el numero uno y aparece en la lista de numeros una sola vez. Y tengo que hallar las inversiones de 1, sé que el resultado correcto que me debe de dar la modificacion es de: 545
A continuacion el fichero de inversiones de uno y el codigo Código: package default_package; ES LO UNICO QUE ME FALTA PARA TERMINARLO, PORFAVOR SI ALGUIEN ME PUDIESE AYUDAR .txt de las inversiones de uno:
54044 14108 79294 29649 25260 60660 2995 53777 49689 9083 16122 90436 4615 40660 25675 58943 92904 9900 95588 46120 29390 91323 85363 45738 80717 57415 7637 8540 6336 45434 65895 61811 8959 9139 31027 87662 2484 65550 23260 15616 3490 49568 5979 44737 52808 72122 37957 34826 21419 73531 94323 52910 84496 71799 50162 1692 1565 59279 56864 20141 13893 63942 6055 33424 44771 25678 33639 27793 41268 1857 63388 32976 46195 61291 61740 61680 45264 76361 49243 73250 67432 29124 15198 30626 18950 13857 32569 45179 47696 21283 77169 26357 97885 54741 57246 61929 25997 45859 3353 32204 97451 60550 49516 38558 57674 36443 666 32486 54910 24666 45119 40779 3441 83779 60645 63003 59616 7364 69058 41651 12201 13234 19717 11536 70350 15611 74484 96153 4127 60035 19418 58613 28590 32917 97780 17644 15836 88046 26489 38410 54618 16967 81604 60064 5833 80689 43137 57274 8002 4445 42933 75378 15130 10689 98579 42780 38379 76394 66337 15126 59535 53639 43182 88220 5506 21939 26719 32919 78383 62297 30677 15301 35277 2240 37292 11269 92554 12813 63131 25964 15618 11318 72799 43976 4698 32984 5 56322 30793 46586 36082 25956 61243 44613 59907 13187 43815 52408 63547 86233 7901 50572 29212 10912 54449 373 69509 3580 31479 66601 35427 49309 50428 76859 19840 95749 76993 45747 67663 85229 26778 72164 73627 31869 22208 17759 29409 20625 27533 3911 28506 13185 72229 2975 96029 66725 67778 77399 90300 16005 39433 33342 98536 66330 41629 79932 64508 80437 58093 7690 34357 87977 78134 6271 72856 43004 81631 4654 94363 37138 62061 18913 42432 11926 9778 23507 52921 12302 61620 89415 52561 8564 80333 62937 17680 49024 37850 54127 92136 65865 19416 86651 81030 12473 37840 36215 88329 23844 38832 1807 1726 84720 10551 12770 33510 23806 6831 41122 36046 2410 11380 8861 18964 37605 2021 59504 57029 64121 85107 64293 64821 72694 32390 55767 3884 74771 393 21050 70556 39830 42172 5615 47643 48677 5093 38547 4808 74607 71200 88387 94071 45031 83426 83246 96061 91471 37207 57815 30779 45176 70833 29490 27760 74104 21444 73173 10086 56241 48369 73755 93275 66791 2437 18827 61990 3213 43007 46942 47386 98002 80099 90898 28860 53348 3790 54478 50789 53673 81845 76946 31398 15539 43923 68172 43943 11674 5147 49577 7639 2902 56983 51372 87907 65260 46019 69134 65982 35068 81730 76650 67535 65607 86101 4387 9658 56971 38760 90175 26434 22509 10166 19048 3135 28671 63621 90284 56798 82077 15749 77755 45814 51006 26305 31977 48619 18712 90691 8001 32067 70357 38111 41552 74876 81391 40492 24784 22370 39440 57089 73160 45027 53617 35969 46450 40871 71843 12703 17953 52853 69725 67213 62722 73693 91338 14128 12506 75060 56344 31645 23821 2907 2229 7702 54151 49626 34757 19073 1923 11433 4156 34993 47527 28810 55157 69505 65503 64854 23249 79143 9697 35584 42411 13695 7789 66572 60321 54166 71208 76781 69793 42022 52118 62723 2774 17563 10157 73884 64476 44243 84801 83448 68584 56296 77751 95159 23154 24632 8184 39214 52344 46545 33325 85650 14755 92211 34714 41604 90705 97995 76462 85611 76657 58480 7258 91761 17400 74630 8191 83012 85542 71016 35146 50365 37585 62220 2323 23949 50093 8154 66092 75562 15603 49424 19639 37679 18186 78875 40160 63991 10977 53885 83218 34001 3723 63889 1 40515 36743 42770 32026 24502 52208 17897 78882 26409 74817 50557 4129 97514 67021 28240 45301 98467 53298 94746 59508 4533 28812 79175 57458 71279 14985 61081 72641 50192 24833 10559 3359 31540 74717 6619 34886 22723 62826 4364 44080 4087 31292 76363 98421 92175 71837 88423 84188 63345 30108 18021 38992 73015 6978 19730 77314 20601 73041 40457 43550 33086 86253 71896 24236 1291 9491 16822 91587 98602 26555 30077 10302 24493 2985 39469 90347 30520 42477 56481 5914 38961 10218 16024 93342 92630 7566 74142 54657 81366 88386 85815 4565 5439 1104 2673 65606 83445 70854 9537 73222 2544 31425 63015 81452 90318 75062 83615 19052 92492 48714 85098 15267 31282 91826 92471 43067 73944 47591 71457 79798 90235 60824 53372 53812 27261 49099 19917 76978 99670 58487 33747 16944 30719 18716 76276 93076 70826 63639 85111 98441 21908 35279 33927 33433 77583 95025 31616 25321 37617 93145 11286 15024 6719 64723 4077 78584 30370 98798 67730 21048 1287 87867 44930 4798 37691 61593 86819 50990 9059 57590 71412 14209 43285 79232 43891 290 36110 69671 88539 59260 88464 54759 40328 37037 85253 94603 18976 89833 74448 90717 20688 18961 46537 53603 42627 39150 8087 37842 80079 33426 48812 47406 10748 44375 61932 80967 63310 7592 70797 1452 3192 30692 27239 31166 77857 51830 22097 68817 55733 33720 78069 51195 32571 12279 28924 66443 51929 95208 55440 17321 82411 38022 61143 50625 2213 8447 95005 15634 39956 99281 88705 97294 67363 47231 17704 69554 19093 38744 709 50363 21233 75916 53339 97687 88562 35763 85496 96919 60369 9870 11363 9941 6401 38441 91650 9102 62077 19340 10745 42333 66689 39672 6473 15741 61335 31890 16099 15865 6445 81665 85352 8749 65186 11147 62916 33332 84931 39050 34043 79368 16678 85675 17812 29439 26532 82653 65587 57526 21148 29904 27408 7756 23943 33633 49278 28774 72872 9540 53171 64267 52998 4098 29864 36202 47534 50455 82772 12347 34049 78222 90264 10215 84769 42361 13264 13181 66773 26246 74122 84239 9743 33012 32183 2602 70562 20340 62909 73842 5968 44347 60842 3905 54985 57584 10738 39266 70711 60420 41807 10619 27691 28387 47429 65781 49825 1752 27004 79338 6714 19519 22796 4086 66695 82806 81923 70029 78043 17813 74517 1511 25527 20419 26266 90542 27647 56104 17055 62523 64731 65832 49687 46803 69704 50396 2311 87194 92658 70094 91902 29154 2953 14475 21086 26777 6337 6024 43316 75225 96054 41957 8842 39904 43313 33834 37062 51515 23681 73489 81967 93066 76128 48996 55462 10655 3320 32287 13924 32838 4013 85822 33106 15586 62938 67492 18225 7109 72726 93494 97566 24625 6993 46189 13906 70171 92259 21202 68892 96783 62823 62087 70942 92548 64324 42702 47758 39682 68866 50780 90020 12259 15487 28282 73821 13175 Título: Re: AYUDA CON Inversiones de 1 Publicado por: Pitagoras en 3 Mayo 2022, 12:32 pm Por favor Ayuda!! :(
Título: Re: AYUDA CON Inversiones de 1 Publicado por: Serapis en 3 Mayo 2022, 20:53 pm Citar ...modificar el codigo para que haga las inversiones de 1... A qué llamas 'inversiones de 1'... ?. Fuerzas a mirar el código para intentar dilucidar el asunto, las cuestiones que plantea el interesado deberían quedar claramente definidas en la prosa sin necesidad de tener que mirar el código, por otro lado mirando el código, pareciera que llamas inversiones a cada intercambio... ...pero cuando luego uno lee: Citar ...con un conjunto de numeros de entre los cuales se proporciona el numero uno y aparece en la lista de numeros una sola vez. Y tengo que hallar las inversiones de 1... ...ya no queda claro, ahora pareciera uno entender que entre todos esos valores se ha incluído uno con valor 1, y que se trata de contar cuantas veces cambiara ese valor de la 'parte alta' a la 'parte baja' y viceversa (asumo), por lo que lo que hay en el código es solo el 'intento' y por tanto no sirve para deducir tu propósito.¿Por qué usas ese algoritmo?... El código es tortuoso y sin duda lento además de consumidor de memoria extra. p.d.: Olvidaba decirte, que para poner valores de ejemplo (en el foro), basta poner 20-30 cifras, no 1000... ni 1 millón. Título: Re: AYUDA CON Inversiones de 1 Publicado por: Pitagoras en 5 Mayo 2022, 13:45 pm Disculpa que no me haya expresado correctamente, tienes razon.
A inversiones de uno me refiero a: por medio del diseño del algoritmo recursivo Sort-and-Cout, usando un proceso Merge-and-Cout para hacer el Merge(eso ya esta implementado). Contar el numero de inversiones en dos listas ordenadas. A inversiones de 1 me refiero a el numero de veces por las que tiene que pasar ese numero hasta poder llegar a estar ordenado en la lista (como resultado me han dicho que me tiene que dar 545). Título: Re: AYUDA CON Inversiones de 1 Publicado por: Serapis en 5 Mayo 2022, 18:18 pm Bien, aclarado lo d elas 'inversiones' y no tener que entrar en suposiciones: es cada asignación, pero de un valor cuya magnitad es 1 y solo existe una vez en origen, cuando procede del grupo de la derecha (el grupo alto).
No he revisado si el código está correctamente implementado, ya que es tortuoso y fuerza a uno a desistir, mirando solo por encima. ...dando por supuesto que te funciona bien, ya que tú mismo así lo expresas. de hecho sería adecuado que antes de introducir esas líneas d ecódigo verificaras que el algoritmo ordena correctamente la lista... ...entonces (si el algoritmo funciona bien) lo que te resta es llevar la cuenta en el sitio adecuado. Y dónde se debe llevar la cuenta?. Allí dónde dicho valor es asignado desde la lista 'right'. Punto 1: - Dado que el valor 1 es el menor la cuenta debe llevarse solo cuando (y nada más que cuando) el valor 1 se localiza en la lista de la derecha (right, el grupo de índices mayor). Hay 2 sitios donde esto puede suceder. Nota el 'puede suceder', ya que esto implica un condicional, como verás... Aclarado esto... el pseudocódigo del meollo de la cuestión: Código: ... Al terminar ese bucle, en efecto, al menos una de las listas (left, right) puede no haberse recorrido hasta el final, luego toca pasar el resto de dicha lista a la de a2, en ese caso no hay intercambio de posición. Punto 2: - Pero si el valor 1 estuviera en ese resto de la lista, no deberá contarse. Técnicamente en este apartado, no debe contarse porque solo trata de regresar fusionar el resto de la lista de la derecha en la lista principal. No obstante lo he dejado puesto y comentado, por si el problema se considera de otro criterio... Para terminar, la variable cont, da demasiadas vueltas de acá para allá, es más sencillo si simplemente lo declaras a nivel de la clase, antes de ejecutar el algoritmo se le da el valor 0 y al final se exhibe su cuenta... La razón es que dicha variable modifica el algoritmo, el algoritmo y todas las funciones dependientes, por tanto no son independientes de su uso, luego ni es práctico ni precisa ser aislada en cada función. De hecho si más adelante se reclama modificar el algoritmo para que haga otra cosa distinta, los cambios serán menores. Es decir, trata de independizar el trabajo del algoritmo, de lo que luego se solicita internamente del algoritmo (llevar una cuenta específica), que incluso uno podría añadir ese código como código de compilación condicional, pero que sin ser necesario es adecuado para reflejar la diferencia entre el código del algoritmo y el código extra para cumplir lo solicitado. Remarco en rojo (y por ello lo meto en etiqeutas quote y no code), los cambios principales... del resto de funciones comenta también el 'return cont', solo nos interesa hacer la cuenta (si hemos declarado dicha variable a nivel de la clase). Citar public class Inversiones { int cont=0; int valor=1; ... private static int ordenar(double[] a2, int min, int max) { int middle = (min+max)/2; if(min<max) { //cont = ordenar (a2, min, middle); //cont = cont + ordenar (a2, middle + 1, max); //cont = cont + merge (a2, min, middle, max); } //return cont; } ... public static void main(String[] args) throws IOException { Scanner leer = new Scanner(new File("C:\\Ruta\\InversionsTest.dat")); int nCases = leer.nextInt(); double a[] = new double[nCases]; for(int i=0; i<nCases; i++) { a= leer.nextInt(); } cont = 0; valor =1; ordenar(a, 0, a.length-1)); System.out.println("El número de inversiones que tiene el array dado es: " + cont } Otra cosa, para hacelro más útil, es que declares otra variable a nivel de clase, donde su valor se establece a valor solicitado (1 en el caso presente), tras "cont = 0", así si luego te piden que en vez de hacer la cuenta para el valor 1, te lo reclaman para el valor 1000, te basta cambiar una sola línea de código y es fácil saber donde localizarla. Estas líneas las he marcado de color verde y en el pseudocódigo de más arriba, se utiliza comentado. ...por lo demás como no he probado ni mirado el código a fondo, ten cuidado de agotar el espacio de pila, cosa que se puede producir con funciones recursivas si no están adecuadamente acotadas... p.d.: al final he tenido un tiempito esta noche y he recreado el algoritmo mergesort, el caso es que tomando tu lista de valores, el número de 'inversiones de 1', que me arroja es de 5. Título: Re: AYUDA CON Inversiones de 1 Publicado por: Pitagoras en 8 Mayo 2022, 20:35 pm Gracias!! :D, voy a probar lo que dices, para ver si me funciona
|