Здравствуйте, изучаю c# и нашел задачу с ее решение на python, нужно решение на c#
Определите метод, на вход которого подаётся список чисел в виде одной строки, метод должен сформировать результирующий список, содержащий результат расчёта для каждого элемента исходного списка сумму двух его соседних элементов. Например, если на вход подаётся список «1 3 5 6 10», то на выход ожидается список «13 6 9 15 7». Решение на питоне:
lst=[1, 3, 5, 6, 10]
res=[]
if len(lst) != 1:
for i in range(0,len(lst)):
res.append(lst[(i-1)%len(lst)]+lst[(i+1)%len(lst)])
else:
res.append(lst[0])
print res
Ответы (2 шт):
Автор решения: Влад Бочкарёв
→ Ссылка
static class Program
{
public static int NormalizeIndex(int index, int maxindex)
{
if (index < 0)
return maxindex + index;
return index % maxindex;
}
static void Main()
{
string numbers = Console.ReadLine();
var elements = numbers.Split(' ');
for(int i = 0; i < elements.Length; i++)
{
Console.WriteLine(int.Parse(elements[NormalizeIndex(i-1, elements.Length)]) + int.Parse(elements[NormalizeIndex(i + 1, elements.Length)]));
}
Console.ReadLine();
}
}
Автор решения: slippyk
→ Ссылка
static void Main(string[] args)
{
int[] originArray = { 1, 3, 5, 6, 10 };
Console.WriteLine(string.Join(" ", originArray));
// "1 3 5 6 10"
int[] modifiedArray = SumNeighboringElements(originArray);
Console.WriteLine(string.Join(" ", modifiedArray));
// "13 6 9 15 7"
SumNeighboringElements2(ref originArray);
Console.WriteLine(string.Join(" ", originArray));
// originArray = "13 6 9 15 7"
Console.ReadKey();
}
// возвращает новый массив
public static int[] SumNeighboringElements(int[] originArray)
{
if (originArray.Length == 1)
{
return originArray;
}
int[] modifiedArray = new int[originArray.Length];
for (int i = 0; i < originArray.Length; i++)
{
modifiedArray[i] = originArray[(i - 1 + originArray.Length) % originArray.Length] + originArray[(i + 1 + originArray.Length) % originArray.Length];
}
return modifiedArray;
}
// изменяет текущий массив
public static void SumNeighboringElements2(ref int[] originArray)
{
if (originArray.Length != 1)
{
int firstItem = originArray[0];
int leftNeighbor = originArray[originArray.Length - 1];
int index = 0;
while (index < originArray.Length - 1)
{
int value = leftNeighbor + originArray[(index + 1 + originArray.Length) % originArray.Length];
leftNeighbor = originArray[index];
originArray[index] = value;
index++;
}
originArray[originArray.Length - 1] = leftNeighbor + firstItem;
}
}