Делал задачку на цикл, решил пошагово посмотреть как все работает и встал в ступор. Почему не выходит из цикла когда j = 4?
int[] arr = { 1, 3, 2, 6, 1 };
for (int i = 0, j = 1; j <= arr.Length - 1; j++)
{
int number = arr[i];
if (i == arr.Length - 1)
break;
if (number + arr[j] == k || (number + arr[j]) % k == 0)
result++;
if (j == arr.Length - 1)
{
i++;
j = i;
}
}
Вначале замечание:
Условие
if (number + arr[j] == k || (number + arr[j]) % k == 0)
избыточно. Достаточно проверки
if ((number + arr[j]) % k == 0)
Как я понял, смысл программы подсчитать количество пар чисел массива, сумма которых делится на k. Почему бы не упростить задачу и повысить читабельность кода при помощи второго вложенного цикла?
int[] arr = { 1, 3, 2, 6, 1 };
for (int i = 0; i < arr.Length - 1; i++) {
for (int j = i + 1; j < arr.Length; j++) {
if ((arr[i] + arr[j]) % k == 0)
result++;
}
}
Вставлю свои пять копеек, как бывший участник егэ по информатике:
Вложенные циклы с условием, зависимым от N, делают время выполнения программы зависимым от N*N. Более правильным было бы:
Но при не очень большой длине входящих массивов целесообразней, конечно же, использовать вложенный цикл.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости