Нахождение номера первого отрицательного элемента массива, делящегося на 5 с остатком 2 - C#
Формулировка задачи:
Здравствуйте! Я новичек, написал код, но по нему есть пара вопросов. Код решает следующие задачи: Дан массив целых чисел из n элементов, заполненный случайным образом числами из промежутка [-10,20]. 1. Найти сумму элементов, имеющих нечетные индексы. 2. Подсчитать количество элементов массива, значения которых больше заданного числа А и кратных 5. 3. Найти номер первого отрицательного элемента, делящегося на 5 с остатком 2.
Но при решении 3ей задачи возникает проблема, индексы чисел -7, -12, -17 находятся корректно, но при наличии в массиве числа -2, его индекс тоже находиться, чего быть не должно.(строки 99-110 в коде) Подскажите пожалуйста, как это исправить.
И второй вопрос, при вводе числа А, первоначальный массив меняется, и все задачи пересчитываются под новый массив, можно ли сделать так, чтобы массив не менялся при вводе А.
using System;
namespace Test
{
public class Program
{
public static void Main(string[] args)
{
// считать с консоли кол-во чисел в массиве
int cntOfNumbers = GetUserInput("количество чисел в массиве");
// массив чисел
var numArray = new int[cntOfNumbers];
// Заполнить массив случайным образом числами из промежутка [-10,20]
FillArray(numArray, cntOfNumbers, -10, 20);
Console.WriteLine("Содержимое массива: " + string.Join(", ", numArray));
/// Задание 1
Console.WriteLine(
"Сумма нечетных элементов: {0}",
GetSum(numArray)
);
/// Задание 2
// считать с консоли число А из задания 2
int maxAbsNumber = GetUserInput("число А");
Console.WriteLine(
"Количество элементов, значения которых кратны 5 и больше заданного числа: {0}",
GetCount(numArray, maxAbsNumber)
);
/// Задание 3
int? crossIndex = GetFirstIndex(numArray);
Console.WriteLine(
"Индекс первого отрицательного числа делящегося на 5 с отатком 2: {0}",
crossIndex == null ? "не найден" : crossIndex.ToString()
);
}
private static int GetUserInput(string description)
{
int result = 0;
Console.WriteLine("Введите " + description);
while (!Int32.TryParse(Console.ReadLine(), out result))
{
Console.WriteLine("Введено некорректное число!");
Console.WriteLine("Введите " + description);
}
return result;
}
// Заполняет массив числами
private static void FillArray(int[] array, int count, int min, int max)
{
var rnd = new Random();
for (var i = 0; i < count; i++)
{
int newNum = rnd.Next(min, max);
array[i] = newNum;
}
}
// Возвращает сумму нечетных элементов из массива
private static int GetSum(int[] array)
{
int sum = 0;
foreach (int num in array)
{
if (num % 2 == 0) // четные пропускаются
continue;
sum += num;
}
return sum;
}
// Возвращает количество элементов, значения которых кратны 5 и превосходят заданное число А
private static int GetCount(int[] array, int A)
{
int count = 0;
foreach (int num in array)
{
if (num < A || num % 5 != 0 ) // не кратные 5 и не превосходящие А пропускаются
continue;
count++;
}
return count;
}
// Возвращает индекс первого отрицательного элемента делящегося на 5 с остатком 2
private static int? GetFirstIndex(int[] array)
{
for (int i = 0; i < array.Length; i++)
{
if (array [i] < 0 && array [i] % 5 == -2)
{
return i + 1;
}
}
return 0;
}
}
}Решение задачи: «Нахождение номера первого отрицательного элемента массива, делящегося на 5 с остатком 2»
textual
Листинг программы
if (array [i] < -2 && array [i] % 5 == -2)