Avatar billede morf4r Nybegynder
25. september 2006 - 14:13 Der er 4 kommentarer og
1 løsning

Palindrom Stack

Jeg har en opgave der burde være simpel, men jeg kan ikke lige finde ud af det ;>
Den lyder på:

Et palindrom er som bekendt et ord der staves ens forfra og bagfra.
F.eks.  ABBA, OTTO, KAJAK, 123321.

Brug nu følgende regler:
1.    Læs char en efter en og smid dem på en stak. Så er denne stak nu ordet i reverse.
2.    Når alle chars er læst, så overfør halvdelen fra den førstnævnte stak til en anden stak.
3.    Hvis der var et ulige antal chars så fjern yderligere en char fra den første stak.
4.    Test om de to stakke er ens char for char. Hvis ja så et Palindrom


Jeg har så fået læst det ind i en stack, og er kommet til 2eren- jeg ved ikke lige hvordan man tager halvdelen og hvordan man tester som de er ens.
Mit lille program ser sådan her ud indtil videre :

        static void Main(string[] args)
        {
            string ord = "123321";

            Stack stak1 = new Stack();
            Stack stak2 = new Stack();

            for (int i = 0; i < ord.Length; i++)
            {
                string temp = ord.Substring(i, 1);
                stak1.Push(temp);
            }

            udskriv(stak1);
        }

        static void udskriv(Stack st)
        {
            foreach (string tmp in st)
            {
                Console.WriteLine("{0}", tmp);
            }
            Console.ReadLine();
        }
Avatar billede coderdk Praktikant
25. september 2006 - 15:30 #1
Ikke for noget men skal du bruge stacks? For det er da den mest kluntede måde at teste om et ord er et palindrom på :-D
Avatar billede morf4r Nybegynder
25. september 2006 - 20:56 #2
Yes- og ja, det er dumt, men vi skal jo lære stacks =)
Avatar billede staever Nybegynder
25. september 2006 - 23:05 #3
using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;

namespace CompareStack
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.Write("Indtast palindrom: ");
            string s = Console.ReadLine();

            Stack s1 = new Stack();
            Stack s2 = new Stack();
            int mid = s.Length/2;

            for (int i = 0; i < s.Length; i++)
                s1.Push(s.Substring(i, 1));

            for (int i = 0; i < mid; i++)
                s2.Push(s1.Pop().ToString());

            if (s.Length % 2 != 0)
                s1.Pop();
           
            if(Udskriv(s1) == Udskriv(s2))
                Console.WriteLine("De er ens");
            else
                Console.WriteLine("Ikke ens");
        }

        public static string Udskriv(Stack s)
        {
            string tmp = "";

            foreach (string str in s)
            {
                tmp += str;
            }

            return tmp;
        }
    }
}
Avatar billede md_craig Nybegynder
28. september 2006 - 22:28 #4
Hvorfor skal det være så besværligt? :P

        public bool IsPalindrom( string str )
        {
            Stack<char> s1 = new Stack<char>();
            Stack<char> s2 = new Stack<char>();

            foreach ( char c in str )
                s1.Push( c );

            while ( s1.Count > s2.Count )
            {
                char c = s1.Pop();
                if ( s1.Count != s2.Count )
                    s2.Push( c );
            }

            while ( s1.Count > 0 )
            {
                if ( s1.Pop() != s2.Pop() )
                    return false;
            }

            return true;
        }
Avatar billede staever Nybegynder
30. oktober 2007 - 21:57 #5
Det var godt Thomas ;)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester