Gå til innhold

Anbefalte innlegg

Hei!

 

Har en opg som jeg lurer litt på:

 

Et palindrom er et tall som kan lese likt begge veier(eks 101). Hva er det største palindromet av to produkter som består av to tall?

 

Har prøvd å programmere det, men den fungerer ikke. Hva må gjøres annerledes i følgende kode:

 

 

int tall = 0;

string utskrift = "";

string tallet = "";

string endeligTall = "";

 

for (int i = 99; i > 10; i--)

for (int j = 99; j > 10; j--)

{

tall = i * j;

string verdiIArray = Convert.ToString(tall);

endeligTall = verdiIArray;

 

for (int baklengs = (verdiIArray.Length - 1); baklengs >= 0; baklengs--)

{

tallet += verdiIArray[baklengs];

if (tallet == endeligTall)

{

utskrift = endeligTall;

}

else

{

break;

}

}

 

 

}

labMelding.Text = "Det største palindromet er " + utskrift;

 

 

}

}

Lenke til kommentar
Videoannonse
Annonse

Du tenker på denne oppgaven http://projecteuler.net/problem=4 ?

 

I så fall kan den løses slik i C# (bruteforce)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace testApp
{
   class Program
   {
       static void Main(string[] args)
       {
           int largest = 0;
           for (int x = 100; x < 1000; x++)
               for (int y = 100; y < 1000; y++)
                   if (isPalindrome(x * y) && x * y > largest)
                       largest = x * y;
           Console.WriteLine("Largest palindrome found is: {0}", largest);
           Console.ReadKey();
       }

       static bool isPalindrome(int tall)
       {
           string numAsString = tall.ToString();
           for (int x = 0; x < numAsString.Length / 2; x++)
               if (numAsString[x] != numAsString[numAsString.Length - x - 1])
                   return false;
           return true;
       }
   }
}

Lenke til kommentar

Du tenker på denne oppgaven http://projecteuler.net/problem=4 ?

 

I så fall kan den løses slik i C# (bruteforce)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace testApp
{
   class Program
   {
       static void Main(string[] args)
       {
           int largest = 0;
           for (int x = 100; x < 1000; x++)
               for (int y = 100; y < 1000; y++)
                   if (isPalindrome(x * y) && x * y > largest)
                       largest = x * y;
           Console.WriteLine("Largest palindrome found is: {0}", largest);
           Console.ReadKey();
       }

       static bool isPalindrome(int tall)
       {
           string numAsString = tall.ToString();
           for (int x = 0; x < numAsString.Length / 2; x++)
               if (numAsString[x] != numAsString[numAsString.Length - x - 1])
                   return false;
           return true;
       }
   }
}

 

Ja, tenkte på den. Men skulle gjerne fullført min egen kode, slik at den kan fungere! :p Du vet ikke hva som er feil og må endres på? :p

Lenke til kommentar

først og fremst: Hadde du puttet koden dinn inn i code-tags hadde den vært lettere å lese.

 

Første feil: Du stopper ved første palindrome du finner, du kan ikke garantere at dette er det største. Matematikken i algoritmen din garanterer ikke dette. Nå er du heldig at en av faktorene i det største palindromet er 99, og derfor vil du finne dette; men dette er bare en tilfeldighet. Hadde det største palindromet vært f.eks. 98 * 96, ville du finnet et helt annet palindrome. Må derfor legge inn en sjekk for om det er den største.

 

Altså er det veldig mye feil med koden din, og det var derfor jeg heller bare startet fra scratch. Men skrev litt om på koden din og fikset en del av feilene og endte opp med noe slikt:

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
   class Program
   {
       static void Main(string[] args)
       {
           int tall = 0;
           int storstePalindrome = 0;

           for (int i = 99; i > 10; i--)
           for (int j = 99; j > 10; j--)
           {
               tall = i * j;
               string tallet = "";
               string verdiIArray = Convert.ToString(tall);

               for (int baklengs = (verdiIArray.Length - 1); baklengs >= 0; baklengs--)
                   tallet += verdiIArray[baklengs];

               if (tallet == verdiIArray && tall > storstePalindrome)
               {
                   storstePalindrome = tall;
                   break;
               }
           }

           Console.WriteLine("Det største palindromet er {0}", storstePalindrome);
           Console.ReadKey();
       }
   }
}

Endret av etse
Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...