М
Молодежь
К
Компьютеры-и-электроника
Д
Дом-и-сад
С
Стиль-и-уход-за-собой
П
Праздники-и-традиции
Т
Транспорт
П
Путешествия
С
Семейная-жизнь
Ф
Философия-и-религия
Б
Без категории
М
Мир-работы
Х
Хобби-и-рукоделие
И
Искусство-и-развлечения
В
Взаимоотношения
З
Здоровье
К
Кулинария-и-гостеприимство
Ф
Финансы-и-бизнес
П
Питомцы-и-животные
О
Образование
О
Образование-и-коммуникации
jutyra
jutyra
13.11.2021 01:46 •  Информатика

Сумма, делящаяся на три
Необходимо найти самый большой непрерывный фрагмент в массиве a1,a2...aN, сумма элементов которого делится на 3.

Входные данные

В первой строке входных данных содержится число N≤100000. Во второй строке даны N чисел, по модулю не превосходящих 109, — элементы массива.

Выходные данные

Выведите два числа — индексы начала и конца фрагмента. Если таких фрагментов несколько, то выведите фрагмент с минимальным индексом начала.

Если ответа не существует, то выведите единственное число −1.

Примеры
Ввод
5
Вывод
1 2 3 4 5
1 5
Ввод
4
1 2 3 4
Вывод
1 3

#include
#include
using namespace std;
int main () {
int n;
cin >> n;
vector a(n),s(3, -1), e(3, -1);
for (int i = 0; i < n; i++)
cin >> a[i];
int mmax = -1;
int maxlen = 0;
int m = 0;
int p = 0;
for (int i = 0; i < n; i++) {
if (s[m] < 0)
s[m] = i;
p += a[i] % 3;
m = p % 3;
if (s[m] >= 0) {
e[m] = i;
if (e[m] - s[m] + 1 > maxlen) {
maxlen = e[m] - s[m] + 1;
mmax = m;
}
}
}
if (mmax >= 0)
cout << s[mmax] + 1 << " " << e[mmax] + 1;
else
cout << mmax;
}

👇
Открыть все ответы
Ответ:
ulzhan16061999
ulzhan16061999
13.11.2021
  var mas:array[0..9] of integer; 
 i,max,min,k:integer;
  arifm:real;
begin 
k:=0;
arifm:=0; 
 Randomize;
  for i:=0 to 9 do
  mas[i]:=Random(15);
  for i:=0 to 9 do 
 write(mas[i],'  '); 
 {poisk max} 
   max:=mas[0];
     for i:=1 to 9 do 
    if max<mas[i] then 
    max:=mas[i]; 
     {poisk min} 
   min:=mas[0]; 
   for i:=1 to 9 do 
    if min>mas[i] then 
    min:=mas[i];
     arifm:=(max+min)/2; 
    writeln('max: ',max); 
   writeln('min: ',min); 
    writeln('arifm: ',arifm:0:3); 
   for i:=0 to 9 do 
   if mas[i]<arifm then 
    inc(k); 
   writeln('k: ',k);
  readln;
end.
4,6(67 оценок)
Ответ:
mishel7884
mishel7884
13.11.2021

1.

program z1;

var a:array [1..10] of integer;

i,k:integer;

begin

write ('Введите элементы массива через пробел и нажмите Enter ');

for i:=1 to 10 do read (a[i]);

write ('Массив: ');

for i:=1 to 10 do write (a[i],'  ');

writeln;

write ('Номера элементов больше 5: ');

for i:=1 to 10 do if a[i] > 5 then

begin

write (i,'  ');

k:=k+1

end;

writeln;

writeln ('Элементов больше 5: ',k)

end.

2.

program z2;

var s:string;

begin

readln (s);

while pos('о',s)<>0 do delete(s,pos('о',s),1);

writeln(s)

end.

Объяснение:

Смотри картинки

2. Программа удаляет только строчные русские о


НУЖНА ЗАДАЧА: Составить программу на Паскале для обработки одномерного массива из 10 элементов. Знач
НУЖНА ЗАДАЧА: Составить программу на Паскале для обработки одномерного массива из 10 элементов. Знач
4,4(10 оценок)
Это интересно:
Новые ответы от MOGZ: Информатика
logo
Вход Регистрация
Что ты хочешь узнать?
Спроси Mozg
Открыть лучший ответ