Въпрос за задачата Symbol in Matrix от C# advanced lab
Здравейте. Написах следния код от задачата https://pastebin.com/nzYpQeRK но judge-a ми дава 60 / 100. Знае ли някой къде се чупи кода?
Здравейте. Написах следния код от задачата https://pastebin.com/nzYpQeRK но judge-a ми дава 60 / 100. Знае ли някой къде се чупи кода?
Здравей, MartinRusanov,
Малка корекция до 100/100:...
===
for (int rows = 0; rows < N; rows++)
{
for (int cols = 0; cols < N; cols++)
{
if ((matrix[rows, cols] == symbol))
{
Console.WriteLine("(" + rows + ", " + cols + ")");
//break;
return;
}
//else if (rows == N - 1 && cols == N - 1 && matrix[rows, cols] != symbol)
//{
// Console.WriteLine(symbol + " does not occur in the matrix");
//}
//else
//{
// continue;
//}
}
}
Console.WriteLine(symbol + " does not occur in the matrix");
===
Може да пробваш подобно въвеждане (в този случай се чете по-лесно, иначе за кратки варианти също работи добре):
=
Console.WriteLine($"({rows}, {cols})");
=
Поздрави,
Иван
Използвате break при намиране на съвпадение във вложения цикъл. Това прекъсва изпълнението на текущия вътрешен цикъл, но не и на външния, който ще се завърти отново, освен ако не е бил на последния ред, и накрая ще отпечата и съобщението, че не е намерен символа.
Ето тест, който демонстрира проблема:
3
ABC
X!@
DEF
!
Помислете как да решите този проблем.
Има много варианти (булева променлива, прекъсване на програмата и т.н.) и целта на задачата е да упражните точно това.
@MartinBG,
разбира се, и този път обучението ви е правилно!
Да, примерно при class се ползва return, но при ползване на return при задачата на @MartinRusanov е кратко решение... (иначе bool + break може да върши коректно, но е с повече текста при тази задача)
От друга страна, пиша по-кратки думи, но обученията идват от Майстори и Треньори, не от мен!
Поздрави,
Иван
Благодаря на всички !
Здравейте,
и аз благодаря за темата и отговорите.
Имах същия проблем със задачата, но смених break с return, като предваритено направих и една проверка с Contains() дали се съдържа дадения символ. Накрая получих 100/100.
Поздрави!
using System;
using System.Linq;
namespace SymbolInMatrix
{
class Program
{
static void Main(string[] args)
{
int size = int.Parse(Console.ReadLine());
char[,] matrix = new char[size, size];
for (int row = 0; row < size; row++)
{
char[] currentRow = Console.ReadLine().ToArray();
for (int col = 0; col < size; col++)
{
matrix[row, col] = currentRow[col];
}
}
char symbol = char.Parse(Console.ReadLine());
if (matrix.Cast<char>().Contains(symbol))
{
for (int row = 0; row < matrix.GetLength(0); row++)
{
for (int col = 0; col < matrix.GetLength(1); col++)
{
if (matrix[row, col] == symbol)
{
Console.WriteLine($"({row}, {col})");
return;
}
}
}
}
else
{
Console.WriteLine($"{symbol} does not occur in the matrix");
}
}
}
}
100/100
int n = int.Parse(Console.ReadLine());
char[,] matrix = new char[n, n];
for (int row = 0; row < matrix.GetLength(0); row++)
{
string input = Console.ReadLine();
for (int col = 0; col < matrix.GetLength(1); col++)
{
matrix[row, col] = input[col];
}
}
char target = char.Parse(Console.ReadLine());
bool isFound = false;
for (int row = 0; row < matrix.GetLength(0); row++)
{
for (int col = 0; col < matrix.GetLength(1); col++)
{
if (matrix[row, col] == target)
{
isFound = true;
Console.WriteLine($"({row}, {col})");
break;
}
}
if (isFound)
{
break;
}
}
if (!isFound)
{
Console.WriteLine($"{target} does not occur in the matrix");
}