Loading...

Във форума е въведено ограничение, което позволява на потребителите единствено да разглеждат публикуваните въпроси.

stefism1 avatar stefism1 28 Точки

Multidimensional Arrays - Exercise, 6. Jagged Array Manipulator

Здравейте.

На тази задача ми дава грешка на два от тестовете (87 от 100).

Дали някой има идея къде е проблема?

https://github.com/stefism/Projects/blob/master/C%23Advanced-May-2019/06-MultiDimentionalArr-Exercise/06-JaggedArrayManipulator/Program.cs

https://judge.softuni.bg/Contests/1455/Multidimensional-Arrays-Exercise

Благодяря предварително на всички колеги за съдействието!

Тагове:
0
C# Advanced
DanielSamanliev avatar DanielSamanliev 13 Точки
Best Answer

На мен ми проработи като смених назъбеният масив на double.

2
stefism1 avatar stefism1 28 Точки

Здравейте.
Много благодаря!
Да, това беше. И на мен ми проработи така, въпреки, че не разбирам - в условието е казано 

On the next N lines, you will receive sequences of integers, separated by a single space. Each sequence is a row in the matrix.

Явно аз не го превеждам добре. Най-вероятно под integer трябва да се разбира просто числа, без определение дали са цели и дабъли.

0
23/09/2019 09:42:05
gim13 avatar gim13 8 Точки

Здравей.

Входа е integer който по- късно има вероятност да 

делим на 2. Ако числото е нечетно получаваме дроб,

затова ни трябва double.

С най-добри пожелания

Генади

2
stefism1 avatar stefism1 28 Точки

Ясно. Сега ми се изясни защо ни трябва дабъл.

Мерси много!

0
TsTanev avatar TsTanev 5 Точки

И моят резултат е 87 точки, въпреки "double" стойностите.

https://pastebin.com/nAdKYruY

Някой вижда ли проблема ?

0
gim13 avatar gim13 8 Точки

Здравей, Танев.

На ред 18 вместо числото "5" трябва да е променливата "rows".

Освен това, когато умножаваш или делиш на 2, трябва да го 

правиш и с двата реда а не само с първия.

С най-добри пожелания:

Генади

0
Elena123456 avatar Elena123456 235 Точки

Здравейте,

понеже не открих  друга тема за тази задача ще си позволя да пиша тук.

Ако някой има по-съкратено решение, моля да го сподели, защото ми се струва малко прекалено 90 реда код. Впрочем не се отваря по-горния код в github.

Това е моя дълъг вариант, който успях да измисля- https://pastebin.com/GmGcJVw0

Предварително благодаря!

Поздрави и Весела Коледа!

0
24/12/2020 22:02:59
Axiomatik avatar Axiomatik 2422 Точки

On average, this exercise needs to be solved with around 90 lines. Keep in mind, that a shorter code is not always necessarily the better variant - most importantly is the readability and when you have to decipher some crazy ternary operators in order to save 5-10 lines, I'll rather take the longer version.

;-) - Best,

 

using System;
using System.Linq;
using System.Collections.Generic;

namespace jaggedArrayManipulator
{
    class Program
    {
        static void Main(string[] args)
        {
            int rows = int.Parse(Console.ReadLine());
            double[][] array = new double[rows][];

            for (int row = 0; row < rows; row++)
            {
                array[row] = ConsoleParse();
            }

            for (int row = 0; row < rows - 1; row++)
            {
                if (array[row].Length == array[row + 1].Length)
                {
                    array[row] = Multiplier(array[row]);
                    array[row + 1] = Multiplier(array[row + 1]);
                }
                else if (array[row].Length != array[row + 1].Length)
                {
                    array[row] = Divider(array[row]);
                    array[row + 1] = Divider(array[row + 1]);
                }
            }

            string command = Console.ReadLine();

            while (true)
            {
                string[] cmdSplit = command
                    .Split(" ", StringSplitOptions.RemoveEmptyEntries);
                if (cmdSplit[0] == "Add")
                {
                    int row = int.Parse(cmdSplit[1]);
                    int col = int.Parse(cmdSplit[2]);
                    double value = double.Parse(cmdSplit[3]);
                    if ((row >= 0 && row < array.Length) && (col >= 0 && col < array[row].Length))
                    {
                        array[row][col] = AddOperator(array[row][col], value);
                    }
                }
                else if (cmdSplit[0] == "Subtract")
                {
                    int row = int.Parse(cmdSplit[1]);
                    int col = int.Parse(cmdSplit[2]);
                    double value = double.Parse(cmdSplit[3]);
                    if ((row >= 0 && row < array.Length) && (col >= 0 && col < array[row].Length))
                    {
                        array[row][col] = SubOperator(array[row][col], value);
                    }
                }
                else if (cmdSplit[0] == "End")
                {
                    foreach (var row in array)
                    {
                        Console.Write(string.Join(" ", row));
                        Console.WriteLine();
                    }
                    break;
                }

                command = Console.ReadLine();
            }
        }

        static double AddOperator(double number, double value) =>
            number += value;

        static double SubOperator(double number, double value) =>
            number -= value;

        static double[] ConsoleParse() =>
            Console.ReadLine()
            .Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)
            .Select(double.Parse)
            .ToArray();

        static double[] Multiplier(double[] array) =>
            array = array
            .Select(x => x * 2)
            .ToArray();

        static double[] Divider(double[] array) =>
            array = array
            .Select(x => x / 2)
            .ToArray();
    }
}

 

2
engenginy avatar engenginy 4 Точки

Ето едно решение и от мен:

int n = int.Parse(Console.ReadLine());

double[][] matrix = new double[n][];
for (int row = 0; row < n; row++)
{
    matrix[row] = Console.ReadLine().Split().Select(double.Parse).ToArray();
}

for (int row = 0; row < n - 1; row++)
{
	if (matrix[row].Length == matrix[row + 1].Length)
	{
		matrix[row] = matrix[row].Select(x => x * 2).ToArray();
        matrix[row + 1] = matrix[row + 1].Select(x => x * 2).ToArray();
	}
	else
	{
        matrix[row] = matrix[row].Select(x => x / 2).ToArray();
        matrix[row + 1] = matrix[row + 1].Select(x => x / 2).ToArray();
    }
}

string input;
while ((input = Console.ReadLine()) != "End")
{
	string[] cmdArgs = input.Split();
	string command = cmdArgs[0];
	int row = int.Parse(cmdArgs[1]);
	int col = int.Parse(cmdArgs[2]);
	double value = double.Parse(cmdArgs[3]);

	if (row >= 0 && row < n)
	{
		if (col >= 0 && col < matrix[row].Length)
		{
			if (command == "Add")
			{
				matrix[row][col] += value;
			}
			else
			{
                matrix[row][col] -= value;
            }
		}
	}
}

for (int row = 0; row < n; row++)
{
    Console.WriteLine(string.Join(" ", matrix[row]));
}

 

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.