UVa Online Judge - #100

Tags:    c++

Jeg prøver at løse dette problem: http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=3&page=show_problem&problem=36
Hvor en given talrækkes, tal, har en cycle length. Denne cycle length er angivet på hvor mange gange det tal kan tranformeres før det bliver 1. Hvis tallet er lige divideres det med 2, hvis tallet er ulige ganges det med 3 samt plusses med 1.

Og er kommet frem til denne bruteforce løsning i ANSI C:
Fold kodeboks ind/udKode 


Jeg har testet inputs med det på problemstillingen og får samme output. Har også fundet en hjemmeside der kunne give output ud fra noget input man skrev på og der giver mit program også samme svar.

Kan nogen se fejl i koden eller min fremgangsmåde (udover brute force)?



Indlæg senest redigeret d. 22.09.2010 20:58 af Bruger #14645
Måske jeg misforstår dig, men hvis du får de rigtige testoutput, hvad skal vi så kigge efter?

Jeg ville nok ikke lave min while løkke på den måde og så breake ved 1, men i bund og grund betyder det nok ikke noget.



Måske jeg misforstår dig, men hvis du får de rigtige testoutput, hvad skal vi så kigge efter?

Jeg får de 4 rigtige outputs fra de 4 inputs i eksemplet. Jeg har prøvet at finde et webprogram hvor man kan skrive vilkårlige input og den vil give en outputtet. Det har jeg prøvet og der får jeg også det rigtige output. Men et eller andet sted må der gå noget galt, for når jeg submitter til UAv Online Judge siger den der fejl i outputtet.

Det den allerførste opgave i hele deres problemsæt så jeg rimelig overbevist om fejlen ligger i min algoritme et sted. Men er lidt på bar bund om hvor.

Har testet at løkken inkluderer i og j hvilket den gør, det skal den også, så det ikke fordi jeg glemmer at beregne "cycle-lengthen" på endepunkterne.



Indlæg senest redigeret d. 23.09.2010 10:02 af Bruger #14645
Jeg ved ikke hvordan det foregår med upload og hvilke regler der er. Umiddelbart ser programmet ok ud. Dog er stdbool.h (trods navnet) ikke en standard ANCI C header. Prøv at slette den og lave while(true) om til while(1).

Jeg bryder mig heller ikke om at bruge break på den måde.



Jeg ved ikke hvordan det foregår med upload og hvilke regler der er. Umiddelbart ser programmet ok ud. Dog er stdbool.h (trods navnet) ikke en standard ANCI C header. Prøv at slette den og lave while(true) om til while(1).

Jeg bryder mig heller ikke om at bruge break på den måde.

Fjernede stdbool.h og ændrede min while til (number != 1). Stadig siger den svaret er forkert :(.

Fold kodeboks ind/udKode 


Interessant: (number != 1) i stedet for (1) og break, gav en fordobling i kørselstiden.



Indlæg senest redigeret d. 24.09.2010 00:59 af Bruger #14645
Sådan :).. Fandt en anden på nettet som havde lavet en meget lignende løsning men han læste inputtet med scanf så kunne være det ikke var argumenter til programmet. Så brugte scanf selv og fik det til at virke. Det tog ( 0.604s ud af et maks på 3.000s):

Fold kodeboks ind/udKode 

Mange tak for hjælpen alligevel.



t