Проблем при задача в judge "Tripple Sum"
int[] arr = Console.ReadLine().Split(' ').Select(int.Parse).ToArray();
var res = false;
for (int i = 0; i < arr.Length; i++)
{
for (int j = i + 1; j < arr.Length; j++)
{
int a = arr[i];
int b = arr[j];
int sum = a + b;
if (arr.Contains(sum))
{
Console.WriteLine("{0} + {1} == {2}", a, b, sum);
res = true;
}
}
if (res == false)
Console.WriteLine("No");
}
така ми дава грешка когато няма отговори.
като закоментирам if (res == false)
Console.WriteLine("No");
пак ми дава грешка
Това е защото първо трябва да се проверят всички възможни комбинации от числа и ако няма нито една тройка отговаряща на условието a + b = c, тогава да се отпечата "No". Проверих в Judge-а - дава 100 точки като изнесеш проверката извън циклите.
if (res == false) не е много четимо и не се препоръчва от гледна страна на качествения код.
if(!res) ето така се прави.
А да сме по точни името на променливата трябва да е нещо от сорта на: if(!haveSum).
Просто давам препоръка ;)
Опитвам се да реша задачата по алтернативен начин без Contains.
Съгласно резултатите в Slide 18 of 44 от презентацията всичко е "ток и жица" - TEST OK!!!
Според Judge обаче, съм прав наполовина и малко отгоре - резултат 60/100
Кодът е:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace TrippleSumForLoop_10._05._2016
{
class Program
{
static void Main(string[] args)
{
int[] nums = Console.ReadLine().Split(' ').Select(int.Parse).ToArray();
bool isSumEqual = false;
int sum = 0;
for (int left = 0; left < nums.Length; left++)
{
for (int right = left + 1; right < nums.Length; right++)
{
sum = nums[left] + nums[right];
for (int i = 0; i < nums.Length; i++)
{
if (sum == nums[i])
{
isSumEqual = true;
Console.WriteLine("{0} + {1} == {2}", nums[left], nums[right], sum);
}
}
}
}
if (!(isSumEqual))
{
Console.WriteLine("No");
}
}
}
}
Къде бъркам ?
Благодаря Ви предварително.