Професионална програма
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 192 Точки

Здравейте,

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

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

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

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

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

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

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