Задача от стрингове: "Character Multiplier" - C# Fundamentals
Колеги, моля хвърлете едно око на кода.
Джаджа отсъжда 60 точки. Не мога да открия, но сигурно някакъв вариант съм изпуснал...
Колеги, моля хвърлете едно око на кода.
Джаджа отсъжда 60 точки. Не мога да открия, но сигурно някакъв вариант съм изпуснал...
Разгледай кода ми ако ти е от полза:
да кажем че minLength = 5 и maxLength = 8
първо въртиш 5 пъти (0,1,2,3,4) и после въртиш още maxLength - minLength, обаче понеже си написал '<=' въртиш още 4 пъти (0,1,2,3) така въртиш 9 вместо 8 пъти, пробвай само с '<'
Благодаря за намесата, колега. За съжаление се оказва, че не е това грешката. При проверката с последния тест от заданието, където първия стринг има само един елемент се оказва, че дава погрешен резултат, когато премахна знака за равно, а джаджа също е категоричен 60 т. Все още не мога да открия откъде идва проблема.
единственото друго, за което мога да се сетя, е да пмениш long на BigInteger, но се съмнявам чак 4 теста да оправи
все пак пробвай - using System.Numerics; и ги смени
Да, променях и типовете данни, включително и BigInteger, но задачата отново не мина всички тестове в джаджа.
Ето фикс на кода ти:
long или BigInteger не ти трябват, int е достатъчен за сумата. Това не съм го пипал, оправи си го ако искаш.
Предполагам, че ще разбереш грешките ти. Първия if else НЕ трябва да го има, даже в този else повтаряш операцията
sum += firstArr[i] * secondArr[i];
, което не трябва да се случва.
Също въртенето в цикъла
for (int i = minLength; i <= maxLength - minLength; i++)
го преправих на
for (int i = minLength; i < maxLength; i++)
По-горе колегата ти е обяснил защо.
Моля, за Best Answer за времето, което отделих да ти поръчкам кода :")
Благодаря ти за подробното проследяване на кода.
За съжаление съм под 15 т. и не съм сигурен дали ми прие отговарянето с "най-добрия" ;)
Ето и моят код: https://pastebin.com/fMUXLSCt
Едно по четимо решение
using System;
namespace _2.__Character_Multiplier
{
class Program
{
static void Main(string[] args)
{
string[] input = Console.ReadLine()
.Split();
string first = (input[0]);
string second = (input[1]);
char[] firstChar = input[0].ToCharArray();
char[] secondChar = input[1].ToCharArray();
long total = 0;
int minArray = Math.Min(input[0].Length, input[1].Length);
for (int i = 0; i < minArray; i++)
{
long midTotal = firstChar[i] * secondChar[i];
total += midTotal;
}
if (firstChar.Length > secondChar.Length)
{
for (int i = 0; i < firstChar.Length-minArray; i++)
{
total += firstChar[i + minArray];
}
}
else
{
for (int i = 0; i < second.Length-minArray; i++)
{
total += secondChar[i + minArray];
}
}
Console.WriteLine(total);
}
}
}
Благодаря. Интересно и кратко решение.