[C#] Arrays - 3 задача


2
3.Write a program that compares two char arrays lexicographically (letter by letter).



Отговори



1

от ivaylo.kenov (30760 точки)


0
Много добро решение :) Само не кръщавай променливата, която държи по-малката от двете дължини maxLength - доста объркващо е.

от PBorukova (1129 точки)

0
Да, нещо съм се подвел от бързината, благодаря за коментара! :)

от ivaylo.kenov (30760 точки)



0

Аз мисля, че е по-правилно първо да сравняваме дължините на двата масива.
Това е моето решение : http://pastebin.com/j0zzPLHM


от son4etyyy (416 точки)


0
Лексикографската наредба не е просто сравнение на числа :) . Дефинирана е и за думи с различни дължини. Повече: http://en.wikipedia.org/wiki/Lexicographical_order

от PBorukova (1129 точки)

0
Ако се погледне в книгата "Основи ... C#" в края, където са съветите как да се реши всяка от задачите също е дадено каква е идеята на лексикографската наредба.



1
моето решение:
http://pastebin.com/BWAYxpt2
редактирано!

от Dimov (907 точки)


0
Димич, браво за решението , много стегнато! Обаче, не трябва ли да се каже кой е първия от двата...лексико..блябля.../много трудна дума/ .. :?

от zhelyazkovn (2949 точки)

0
прав си, ще го прегледам

от Dimov (907 точки)



1
Аз размирам задачата така: намираме колко са буквите подредени лексикографски в двата масива и изкарваме при кой масив са повече. Ето моето решение(без допълнителен масив) http://pastebin.com/DjTER6Lt



0
решението ти е интересно и различно може би ще е от полза на колегата, който му се падне да ти проверява домашното да има и коментари за бърза ориентация & time save :)

от ludmil.d (490 точки)


25

Много подробни обяснения на задачата съм качила на блога си:

http://ushort.wordpress.com/2013/01/06/char-arrays-comparison-lexicographically/

А който предпочита, може да гледа кода в pastebin.

http://pastebin.com/k65rKfAx




0
Браво! Изключително добре направено и обяснено! Много полезно за такива начинаещи като мен. Благодаря още веднъж и успех!
Поздрави, Й. Димов

от jdimov (267 точки)

0
Много благодаря за топлите думи. Ще бъда още по-стимулирана, да обяснявам подробно задачите.




6
В учебника е обяснено:
"При лексикографската наредба символите се сравняват един по един като се започва от най-левия. При несъвпадащи символи по-рано е масивът, чийто текущ символ е по-рано в азбуката. При съвпадение се продължава със следващия символ вдясно. Ако се стигне до края на единия масив, по-краткият е лексикографски по-рано. Ако всички съответни символи от двата масива съвпаднат, то масивите са еднакви и никой о тях не е по-рано в лексикографската наредба."
Като се съобразявам с това, съм написал:
using System;
class CompareArrays { static void Main(string[] args) { int n = int.Parse(Console.ReadLine()); int m = int.Parse(Console.ReadLine());
char[] firstArray = new char[n]; char[] secondArray = new char[m];
if (n == m) { for (int i = 0; i < n; i++) { firstArray[i] = char.Parse(Console.ReadLine()); }
for (int i = 0; i < n; i++) { secondArray[i] = char.Parse(Console.ReadLine());
if (firstArray[i] > secondArray[i]) { Console.WriteLine("Lexicographically The Second Array is First"); break; } else if (firstArray[i] < secondArray[i]) { Console.WriteLine("Lexicographically The First Array is First"); break; } else if ((i == n)) { Console.WriteLine("Lexicographically The Arrays are Equal"); } } }
else if (n < m) { Console.WriteLine("Lexicographically The First Array is First"); } else { Console.WriteLine("Lexicographically The Second Array is First"); } } }



0
Моето решение много прилича на твоето, но се чудех за случая, в който единия масив е по-малък от другия. Не мислиш ли, че в учебника се има в предвид, ако символите съвпадат до момента, в който се стигне до край на единия масив. Т.е. не трябва ли и в този случай да правим проверка за съвпадения?


0
Според мен правилно си се насочил, обаче проверката за дължина трябва да е на края - тоест ако ти съвпадат всички символи до текущия в масив А и Б, но масив А вече е свършил тогава той ще е първият. Но ако някой от предните символите в Б е по малък от братчето си в А тогава Б е първи.

от stann1 (1378 точки)



0

Това е моето: http://pastebin.com/MUP7N4P5. По дължина не съм ги сравнявал.


от simonses (30 точки)


4

Ето и моето решение: source.


от jasssonpet (6814 точки)


0
Шегуваш се, нали? :)

от AntonPetrov (654 точки)

0
hahhahahahahahahaha.......

от jdimov (267 точки)



0
В самата задача се иска да се сравнят двата цикъла буква по буква, от където следва, че само сравняване на дължините на масивите не ни устройва. Ето и моето решение и се надявам да помогна. :))
http://pastebin.com/2YGGwytP
Поздрави,
Светослав.

от xellscream (469 точки)


0

Ето и моето решение: http://pastebin.com/dJHrS6C7

Мисля че съм обхванал всички случаи, както е описано в обяснението в учебника. Изследвам три случая - при равни дължини на масивите, при по-дълъг първи масив и при по-дълъг втори. След това сравнявам елементите на масивите и съответно проверявам дали не са равни до края на дължината на по-късия масив. Май не се изразих много добре smiley.