First-Steps-in-Coding-Exercises 8* - Квадрат от звездички (Rectangle Area/Square of Stars in Judge)
Здравейте, колеги! Намирам решение на задача 8* Квадрат от звездички. Работи във Visual studio, но Judge системата не я приема и ми дава само 0-точки.
Правих проверката с безкраен цикъл, без цикъл само с if, но системата не я приема в нито един от случаите. Какъв може да е проблема?
Ето и кода:
static void Main(string[] args)
{
var N=1;
while (true)
{
Console.Write("Enter N (2<=N<=100): ");
N = int.Parse(Console.ReadLine());
if (N >= 2 && N <= 100)
{
break;
}
}
for (int i = 1; i <= N; i++)
{
Console.Write("*");
for (int j = 2; j <= (N - 1); j++)
{
if (i == 1 || i == N)
{
Console.Write("*");
}
else
{
Console.Write(" ");
}
}
Console.WriteLine("*");
}
}
Също и с вариант без цикъл while за проверка на входа:
static void Main(string[] args)
{
Console.Write("Enter N (2<=N<=100): ");
var N = int.Parse(Console.ReadLine());
if (N >= 2 && N <= 100)
{
....................
}
}
Judge системата не приема нито един от двата ми варианта.
Със сигурност има и други решения, но в условието се казва: "Допишете програмата по-горе, за да отпечатва квадрат, съставен от звездички. Може да се наложи да използвате for-цикли."
Къде би могъл да е проблема, при положение, че кодът е работещ?
Благодаря предварително.
Благодаря ти! Това със "trim" и "Numbers check" не го знаех, а е важно. Беше ми много полезно, че го сподели.
Иначе относно решението със стринг ми мина, но го игнорирах, понеже в условието се казваше да използваме "for-цикли" (в мн.ч.) т.е. повече от един цикъл и затова реших да го направя с 2 цикъла вместо със стринг.
Но ще изпробвам и твоят код, за да тествам time-a как е.
Благодаря ти отново, колега!
Да, може би си прав : )) И аз ще помисля над решение с повече от един цикъл : )) Но, като се замисля ти си използвал оператор &&, който се предполага също да не сме взимали :D
При твоето решение с 1 цикъл и стринг, времето се оказа по-добро :) Time: 0.013 s
Но открих един пропуск спрямо условието - липсва проверката N (2 ≤ N ≤100)
И Judge-а обаче не хваща пропуска
Струва ми се че бъркаш сериозно в четенето на условията, не мога да го видя като условие но най-вероятно това N е страната на квадрата. Това че е указано че ще е от 2 до 100 не е необходимо да го проверяваш, а служи като информация. Относно аупута - печата се само тази информация която ни изискват, дори един спейс да има повече ще го отчете като грешен резултат. В твоят случай програмата очаква резултат квадрат от четири звезди, а получава "Enter number......" и четири звезди.
И аз мисля, че нямаше такова условие, ще го проверя по-късно.
Благодаря колега (moholovka), но още в първите 2 отговора писахме за същият проблем, и че той е открит.
Открих го след като погледнах в "Details" - очакваният изход беше "***" а моят даваше "Enter N (2<=N<=100): ***", от което рабрах за проблемния оператор и писах за това, но колегата (MorganFreeFarm) даде полезният отговор за проблема, относно "Checker-а" за "trim" и "Numbers check".
Що се отнася за условието, ето го:
8.* Квадрат от звездички
Напишете C# конзолна програма, която прочита от конзолата цяло положително число N и отпечатва на конзолата квадрат от N звездички, като в примерите по-долу:
--- примрите за вх./изх. ...
1. Направете конзолна C# програма. За да прочетете числото N (2 ≤ N ≤100), използвайте следния код: ...
2. Допишете програмата по-горе, за да отпечатва квадрат, съставен от звездички. Може да се наложи да използвате for-цикли. Потърсете информация в Интернет.
За проверката на N може да се приеме явно и едното и другото (коректност със и без проверка), тъй като и Judge-системата приема задачата със и без проверката на N и дава и за двете 100 точки.
Добре ще е някой от преподавателите в SoftUNI да поясни дали в условията на подобни задачи и така зададено условие, подобна проверка ще се изисква или е само информативно, за да знаем за напред.
Ами след като не ти се изисква някакъв специален резултат при невалиден вход (примерно да отпечаташ "wrong number") не е необходимо да правиш проверка. То в този случай не би било възможно да върнеш квадрат с една звездичка или с -5. Освен това функцията trim, и Number check не правят точно това което колегата е написал, метода trim зачиства whitespace пред и след стринга, можеш да видиш и че има задачи с trimEnd което чисти отзад, но САМО спейсове, ако изпринтиш нещо друго ще влезне към аутпута.
Ако в условието на задачата е казано, че N е между 2 и 100, то входните данни за тест от системата може би ще са в такъв диапазон. Поне за изпита е така.
На изпита към задачите си пише: The input data will always be valid and in the format described. There is no need to check it. Ако не го пише в задачата проверката не е излишна.
Реда
stars = new string('*', n);
е излишен, защото по-горе в
string stars = new string('*', n);
вече си дал тази стойност на stars.
Благодаря, (gabi.ivanova) !
"... There is no need to check it. Ако не го пише в задачата проверката не е излишна."
Това беше полезно уточнение относно условието на задачите - за необходимост или не от проверка!
Най-общо гледай дали в условието пише, че няма нужда от проверка на данните. Ако не го пише, прави проверка защото може това да е уловката в задачата.
Явно в Judge'а не са зададени всички параметри на задачата, понеже и при мен мина с още по просто решение от типа на:
var n = int.Parse(Console.ReadLine());
string fullRow = new String('*', n);
string space = new String(' ',(n - 2));
Console.WriteLine(fullRow);
for (int i = 2; i < n; i++)
{
Console.WriteLine("*{0}*",space);
}
Console.WriteLine(fullRow);
P.S. Дано така да се случва и на изпитите :D
stars = new string('*', n); - това необходимо ли е ? По нагогре си инициализирал "stars" при декларацията.
Да, реда < stars = new string('*', n); > не е необходим, понеже съвпада напълно с първия ред звездички, който вече е зададен по-горе като < string stars = new string('*', n); > и не променя стойността си в хода на програмата. С него и без него не се променя решението, само ако е без реда се съкращава времето за изпълнение на програмата (избягва се повторение на код), по-оптимизирана е и особено ако кода на програмата е дълъг, подобни оптимизации биха оказали влияние на времето за изпълнение.
Здравейте колеги, и аз имам проблем със същата задача. Прочетох коментарите, виждам че решенията ви тръгват, но какво трябва да добавя на моя код : http://pastebin.com/8xicAG6S , за да коригирам "квадрата". Разбирам for циклите , но чертаенето на фигурки ми е трудно. Ако някой може да даде идея какво да добавя с малко пояснение. Благодаря предварително!
Ами пропуснал си шпацията след звездичката:
Console.Write("* ");
Във вътрешния цикъл постави проверка - ако печаташ първи и последен ред - печатай звездички "*", ако печаташ от 2-ри до предпоследен ред - печатай спейс " ".
Извън вътрешния цикъл (j), във външния (i) в началото и в края на цикъла отпечатай по една звездичка "*", защото първата и последната колонка са еднакви във всеки ред. В този случай вътрешния цикъл (j) трябва да започва от 2-я до предпоследния елемент.
Ето пример само за циклите:
for (int i = 1; i <= N; i++)
{
Console.Write("*");
for (int j = 2; j <= (N - 1); j++)
{
if (i == 1 || i == N)
{
Console.Write("*");
}
else
{
Console.Write(" ");
}
}
Console.WriteLine("*");
}
За всеки случай, пълният ми код с FOR-цикли е тук: http://pastebin.com/KujNGUUq
а кода с решение със СТРИНГ е тук: http://pastebin.com/EpBiJ9MN
Дано да ти е било полезно.
Благословения!
Шпацията след звездичката не решава нищо, просто така се получава същият "плътен" квадрат, само че с по един интервал между всяка звездичка.
Трябва да се отпечата само рамката на квадрата, вътре да е празен - с интервали (спейс, шпация ...)
Май говорим за различни задачи, тъй като не е даден линк. Аз гледам тази: https://judge.softuni.bg/Contests/Practice/Index/155#2
Да, така е, за друга задача става въпрос, за тази: https://judge.softuni.bg/Contests/Practice/Index/150#5
задача 8-ма, колегата я е записал в името: _08_SquareOfStars
Ето я и нея: http://pastebin.com/3V7V32B1
Благодаря колеги за помоща, ориентирах се вече за решението на задачата, явно трябва да гледам повече видео уроци и да чета повече от книгата на Наков!
И най-вече да пишеш повече код.
Ще се справиш Velka ( Velkata ), щом си започнал и имаш желание. Ще помагаме с каквото и когато е възможно, с четене, слушане и писане на повечко код, с питане и помощ от колеги и приятели ще се справиш!
Най-важното е да не се отказваш!
Благодаря за поста , при мен се получи задачата в Judga на 100/100 само с твоето решение :)