DeadManWalking Skrevet 10. mars 2008 Del Skrevet 10. mars 2008 Problemstilling: Jeg har en stringarray som inneholder en rekke med tusen tall. Problemet mitt er hvordan jeg kan gjøre hver av dem om til tall slik at jeg kan gjøre matte på tallene inviduellt. Altså psudo; int haha[0] = stringarray[0] Tingen er at atoi får jeg ikke til å funke, og (int)(array[3] = hahaaray - ansinumberbase fikk jeg ikke til å funke heller. HÅper noen forstår hva jeg er ute etter hehe. C++. Lenke til kommentar
Manfred Skrevet 10. mars 2008 Del Skrevet 10. mars 2008 int i = static_cast<int>(str); ? Lenke til kommentar
GeirGrusom Skrevet 10. mars 2008 Del Skrevet 10. mars 2008 Jeg begynte å skrive hvordan man kan gjøre det manuelt; men det er du vel neppe interessert i. Atoi skal fungere, pass på at du bruker _wtoi hvis du har en unicode string Pass også på at det kun er heltall i stringen, og at stringen lar seg konvertere til int i størrelse. Lenke til kommentar
DeadManWalking Skrevet 10. mars 2008 Del Skrevet 10. mars 2008 (endret) Hvordan kan dette gi: #include <iostream> #include <string> using namespace std; int main() { string hihi = "123456789"; int numbs[4]; numbs[0] = static_cast<int>(hihi[0]); cout << numbs [0] << "\n"; return 0; } 49 ut ? wtf Glem det, det ble slik: numbs[0] = static_cast<int>(hihi[0]-0x30); Haha, nå får jeg segmenfault. Jeg ligger ut koden; hvis noe er åpenbart totalt feil. Yell at me! Klikk for å se/fjerne innholdet nedenfor #include <iostream> #include <sstream> #include <string> using namespace std; int main() { // 0-999 string range = "73167176531330624919225119674426574742355349194934969835203127745063262395783180169848 186947885184385861560789112949495459501737958331952853208805511125406987471585238630507156 329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081 533627661428280644448664523874930358907296290491560440772390713810515859307960866701724271 188399879790879227492190169972088809377665727333001053367881220235421809751254540594752243 258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978 686224828397224137565705605749026140797296865241453510047482166370484403199890008895243450 585412275886668811642717147992444292823086346567481391912316282458617866458359124566529476 456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962 554443629812309878799272442849091888458015616609791913387549920052406368991256071760605886 164671094050775410022569831552000559357297257163626956188267042825248360082325753042075296 45"; int cmax = 0; int temp = 0; int numbers[4]; for (int i = 1000; i > 0; i--) { numbers[0] = static_cast<int>(range[i])-0x30; numbers[1] = static_cast<int>(range[i+1])-0x30; numbers[2] = static_cast<int>(range[i+2])-0x30; numbers[3] = static_cast<int>(range[i+3])-0x30; numbers[4] = static_cast<int>(range[i+4])-0x30; temp = numbers[0]*numbers[1]*numbers[2]*numbers[3]*numbers[4]; if(temp > cmax) { temp = cmax; } } cout << cmax << "\n"; return 0; } Og her er oppgaven: Klikk for å se/fjerne innholdet nedenfor Find the greatest product of five consecutive digits in the 1000-digit number. 73167176531330624919225119674426574742355349194934 96983520312774506326239578318016984801869478851843 85861560789112949495459501737958331952853208805511 12540698747158523863050715693290963295227443043557 66896648950445244523161731856403098711121722383113 62229893423380308135336276614282806444486645238749 30358907296290491560440772390713810515859307960866 70172427121883998797908792274921901699720888093776 65727333001053367881220235421809751254540594752243 52584907711670556013604839586446706324415722155397 53697817977846174064955149290862569321978468622482 83972241375657056057490261407972968652414535100474 82166370484403199890008895243450658541227588666881 16427171479924442928230863465674813919123162824586 17866458359124566529476545682848912883142607690042 24219022671055626321111109370544217506941658960408 07198403850962455444362981230987879927244284909188 84580156166097919133875499200524063689912560717606 05886116467109405077541002256983155200055935729725 71636269561882670428252483600823257530420752963450 Endret 10. mars 2008 av data_jepp Lenke til kommentar
GeirGrusom Skrevet 10. mars 2008 Del Skrevet 10. mars 2008 (endret) da henter du bare verdien av det første bytet? er det ikke en string da? edit: dumme meg edit2: så på koden... wtf? du tar jo med alle tallene fra 1 til 4 ganger... jeg skjønner ikke helt hva programmet skal gjøre... string range = ... int cmax = 1; foreach(char c in range) { cmax *= (int)(c - '0'); } cout << cmax; edit3: Du får segmentation fault fordi du begynner på 1000 + 4 (altså utenfor allokert minneområdet) Endret 10. mars 2008 av GeirGrusom Lenke til kommentar
DeadManWalking Skrevet 10. mars 2008 Del Skrevet 10. mars 2008 Find the greatest product of five consecutive digits in the 1000-digit number. 73167176531330624919225119674426574742355349194934 96983520312774506326239578318016984801869478851843 85861560789112949495459501737958331952853208805511 12540698747158523863050715693290963295227443043557 66896648950445244523161731856403098711121722383113 62229893423380308135336276614282806444486645238749 30358907296290491560440772390713810515859307960866 70172427121883998797908792274921901699720888093776 65727333001053367881220235421809751254540594752243 52584907711670556013604839586446706324415722155397 53697817977846174064955149290862569321978468622482 83972241375657056057490261407972968652414535100474 82166370484403199890008895243450658541227588666881 16427171479924442928230863465674813919123162824586 17866458359124566529476545682848912883142607690042 24219022671055626321111109370544217506941658960408 07198403850962455444362981230987879927244284909188 84580156166097919133875499200524063689912560717606 05886116467109405077541002256983155200055935729725 71636269561882670428252483600823257530420752963450 Lenke til kommentar
GeirGrusom Skrevet 10. mars 2008 Del Skrevet 10. mars 2008 ah ok her er mitt forslag Klikk for å se/fjerne innholdet nedenfor #define CVALUE(C) (C - '0') int max; string range = ... int max = 0; for(int i = 0; i < 1000; /* Do nothing, code increments counter */ ) { int tmp = 0; tmp = CVALUE(range[i++]) * CVALUE(range[i++]) * CVALUE(range[i++]) * CVALUE(range[i++]) * CVALUE(range[i++]); if(tmp > max) max = tmp; } std::cout << max; Tror det skal fungere, har ikke testet. Men ihvertfall, du får segmentation fault på grunn av at løkken starterpå 1004, istedet for 1000. Lenke til kommentar
DeadManWalking Skrevet 10. mars 2008 Del Skrevet 10. mars 2008 (endret) Så det. Jeg kjørte koden din og fikk følgende tall: 31752 Svaret ble ikke godkjent på siden til projecteuler, men den ser jo riktig ut. :/ gah YES, det funket. Vi måtte bare starte med i på -1 slik at 0 blir tatt med. Takk for hjelpen Endret 10. mars 2008 av data_jepp Lenke til kommentar
teflonpanne Skrevet 10. mars 2008 Del Skrevet 10. mars 2008 (endret) Vet ikke helt hvor definert flere i++ er inni samme statement altså. Prøv heller i, i + 1, i + 2 osv. edit: Ok, så det funket tydeligvis på din kompilator, men jeg tror fortsatt ikke at det er definert oppførsel i standarden. http://www.eskimo.com/~scs/cclass/notes/sx7c.html Endret 10. mars 2008 av teflonpanne Lenke til kommentar
hishadow Skrevet 10. mars 2008 Del Skrevet 10. mars 2008 Svaret ble ikke godkjent på siden til projecteuler, men den ser jo riktig ut. :/ gahYES, det funket. Vi måtte bare starte med i på -1 slik at 0 blir tatt med. Takk for hjelpen Du kan jo kanskje bruke %5 før du beregner summene, så ser du hvor mange "steg forover" du kan gå. Lenke til kommentar
GeirGrusom Skrevet 10. mars 2008 Del Skrevet 10. mars 2008 (endret) Vet ikke helt hvor definert flere i++ er inni samme statement altså. Prøv heller i, i + 1, i + 2 osv. edit: Ok, så det funket tydeligvis på din kompilator, men jeg tror fortsatt ikke at det er definert oppførsel i standarden. http://www.eskimo.com/~scs/cclass/notes/sx7c.html hmmm ja, det er sant, det tenkte jeg ikke på faktisk... til å begynne med definerte jeg flere variabler, men fjernet det uten å tenke på at jeg også tok med i++ Endret 10. mars 2008 av GeirGrusom Lenke til kommentar
DeadManWalking Skrevet 12. mars 2008 Del Skrevet 12. mars 2008 Jeg har et grid på 20x20, det er tosifra tall. Hvordan kan jeg putte denne inn i en array/matrix (det som passer best ) også jobbe med den etter på? C++ Lenke til kommentar
Vipera Skrevet 12. mars 2008 Del Skrevet 12. mars 2008 Jeg la bare hver linje inn i en endimensjonal string array. Lenke til kommentar
Manfred Skrevet 12. mars 2008 Del Skrevet 12. mars 2008 (endret) I stedet for masse en-dimensjonale arrays, er det jo ikke noe i veien for å ha en to-dimensjonal array. string [,] myArray = new string[20,20]; edit: det var C#, ja.. string[][] myArray = new string[20][20]; blir det vel i C++ Endret 12. mars 2008 av Manfred Lenke til kommentar
teflonpanne Skrevet 12. mars 2008 Del Skrevet 12. mars 2008 (endret) ^ Nei, c++ er ikke java. Det blir int arr[20][20]; Evt int **arr = new *int[row]; for (int i = 0; i < row; i++) arr = new int[col]; hvis du vil lage de dynamisk. Hvis du har en endimensjonal array så blir indexen endimensjonalarray[y * row + x] Endret 12. mars 2008 av teflonpanne Lenke til kommentar
Vipera Skrevet 12. mars 2008 Del Skrevet 12. mars 2008 Nei er ikke noe i veien for å bruke en to dimmensjonal array heller, smak og behag Lenke til kommentar
GeirGrusom Skrevet 12. mars 2008 Del Skrevet 12. mars 2008 (endret) class MyMatrix { protected: string *m_array; public MyMatrix() { m_array = new string[20 * 20]; } ~MyMatrix() { delete[] m_array; } string& operator[] (int x, int y) { return m_array[y * 20 + x]; } }; Funker vel... Endret 12. mars 2008 av GeirGrusom Lenke til kommentar
teflonpanne Skrevet 12. mars 2008 Del Skrevet 12. mars 2008 Nja, kanskje litt overkill med en klasse for å wrappe en endimensjonal array. Operator[] tar uansett bare 1 argument, så må vel i tilfelle bli operator(). Lenke til kommentar
hishadow Skrevet 12. mars 2008 Del Skrevet 12. mars 2008 Er det noe som vil teste nettleseren sin? IE sliter noe veldig. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå