Kezdőoldal » Számítástechnika » Programozás » Miként lehetne ezt a rendezést...

Miként lehetne ezt a rendezést megcsinálni?

Figyelt kérdés

Adott egy lista tele szavakkal, amiben minden szó csak 1x fordul elő, de előfordulhatnak benne egymásnak anagrammák. A feladat az, hogy rendezzem úgy hogy szóhossz szerint csökkenő sorrendbe, hogy legelőszőr a egymásnak anagrammák és ugyanolyan hosszú szavak, ezután a nem anagrammák, de ugyan olyan hosszú szavak végül pedig azok amiknek nincs anagrammájuk. Az meg van, hogy eldöntsem, hogy anagramma--e azzal nincs gond, csupán a rendezéssel. A IComparable interfésszel próbáltam meg oldani, de nem teljesen jó. Tehát aminek egyáltalán nincs anagrammája az a lista legeslegalján legyen, középen szó hossz szerint csökkenő sorrend de azok amik egyenlő hosszúak csoportosítva, legfelül pedig azok szóhossz szerint csökkenő sorrendben amik anagrammák,DE csoportosítva aszerint hogy mely szónak anagrammái.


Jelenleg így néz ki:

utas

suta

botor //nincs angarammája

korok //nincs angarammája

amorf

forma

tarka //nincs angarammája

farom

elolt

letol

.

.

.

leltek //nincs angarammája

torpan //nincs angarammája

szabja

bajsza

kiadja

ajkaid

lankad

kaland

.

.

.

miniszter

miszerint

kalandtura

hajnalokat

hatoljanak



Én végeredményben azt kellene, hogy amit "//nincs angarammája"-val jelöltem az legalulra kerüljön.

Nem tudom mennyire érthető ez így, mindenesetre itt az eddigi kód:


public void rendez()

{

Szavak.Sort(delegate (string x, string y)

{

if (x.Length > y.Length) return 1;

else if (x.Length == y.Length && anagramma_e(x, y) == false) return -1;

else if (x.Length == y.Length && anagramma_e(x, y) == true) return 0;

else return -2;

});


foreach (var item in Szavak)

{

Console.WriteLine(item);

}

}


(Mivel nem sok kód nem használtam kód-megosztó oldalt)

[link]


Vagy csak én értelmezek valamit félre és úgy kell ahogy csináltam???


2020. ápr. 12. 12:03
1 2
 11/15 anonim ***** válasza:
29%

Igazad van, tényleg nem jó, ahogy mondtam. Nem lehet két nem anagrammára simán 1-et visszadni, mert akkor (a,b) és (b,a) összehasonlítás nem lesz konzisztens.


Helyesen így kéne megcsinálni:

Ha a két szó hossza nem egyenlő, a rövidebbet tegye előre.

Ha két hossza egyenlő:

rendezze mindkét szó betűit ABC sorrendbe.

Amelyik így képzett szó előbb jön azt tegye előbbre. Ha ugyanaz a kettő, akkor anagramma és 0-t adjon vissza.


Így ez megoldja az eredeti feladatot.


Sajnos még nem volt időm leprogramozni :)

2020. ápr. 15. 16:01
Hasznos számodra ez a válasz?
 12/15 anonim ***** válasza:
100%
Most eljutottatok oda, amit az első válaszban írtam? :D
2020. ápr. 16. 10:38
Hasznos számodra ez a válasz?
 13/15 A kérdező kommentje:

#12 Az első válaszban te struktúrát ajánlottál. Ettől függetlenül a sorba rendezés valóban kellett (egy ilyen fgv-em egyébként alapból is volt). Egyébként az #5, #11-es válaszok alapján látszólag megoldottam és valóban működik


static int Comapare(string szo1, string szo2)

{

if (szo1.Length != szo2.Length)

{

if (szo1.Length > szo2.Length) return 1;

else return -1;

}

else

{

string egyik = rendez(szo1);

string masik = rendez(szo2);

if (egyik.CompareTo(masik) == 1) return 1;

else if (egyik.CompareTo(masik) == -1) return -1;

else return 0;


}

}

2020. ápr. 16. 11:13
 14/15 anonim ***** válasza:
100%

Kis apróság:


"if (szo1.Length > szo2.Length) return 1;


else return -1;"


Ehelyett elég az, hogy

return szo1.Length - szo2.Length;


"if (egyik.CompareTo(masik) == 1) return 1;


else if (egyik.CompareTo(masik) == -1) return -1;


else return 0;"


Ehelyett meg elég az, hogy


return egyik.CompareTo(masik);

2020. ápr. 16. 11:21
Hasznos számodra ez a válasz?
 15/15 A kérdező kommentje:
Köszönöm mindenkinek a segítséget! Így most már elméletileg minden stimmel.
2020. ápr. 16. 12:34
1 2

Kapcsolódó kérdések:




Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!