Здравствуйте написать задачу на PascalABC.NET Задача. В последовательности, состоящей из 0 и 1, подсчитать максимальное количество подряд стоящих 1. Хранить элементы последовательности в памяти нет необходимости.
№| Название | Место расположения | Площадь, км2 1 Каспийское море |самое большое на Земле озеро, бессточное, расположенное на стыке Европы и Азии| 371 000 км² 2 Верхнее | Одно их больших озер Северной Америки |82 103 км² 3 Виктория | озеро в Восточной Африке, на территории Танзании, Кении и Уганды. Расположено в тектоническом прогибе | 68 800 км² 4 Гурон |озеро в США и Канаде | 59 600 км² 5 Мичиган |пресноводное озеро в США| 58 000 км² 6 Аральское море | бывшее бессточное соленое озеро в средней Азии| 3 300 км² 7 Танганьика | крупное озеро в Центральной Африке| 32 900 км² 8 Байкал |озеро тектонического происхождения в южной части Восточной Сибири| 31 722 км² 9 Большое Медвежье |находится на севере Канады| 31 153 км² 10 Нуаза | Озеро (Нуаза) Малави - самое южное из так называемых Великих африканских озер Восточно-Африканской рифтовой зоны| 6 400км²
/*задача дурацкая для n > 3, ибо не понятно, что делать: 1) разбить все столбцы на группы одинаковых столбцов и посчитать внутри них число пар. Затем суммировать. 2) разбить столбцы на группы одинаковых столбцов и суммировать количество элементов в каждой из групп, если оно больше 1. То есть найти количество столбцов, для которых среди других столбцов найдется хотя бы один идентичный ему 3) разбить столбцы на группы одинаковых столбцов и вывести количество элементов в каждой группе, если оно больше 1. Для n=3 дело проще, потому что таких групп максимум одна, поэтому тут, по сути, неоднозначности не возникает (за исключением того, что в первом пункте...) В общем, решил делать как во втором пункте. ответ в любом случае будет верным.*/ #include <iostream> using namespace std; int n, result = 0; int **ar;//указатель на указатель для создания динамического двумерного массива bool *Flag;//указатель на первый элемент массива флагов void create(int n)//создание динамического массива { ar = new int*[n]; for (int i = 0; i < n; i++) ar[i] = new int[n]; Flag = new bool[n]; for (int i = 0; i < n; i++) Flag[i] = false; } void inp(int n) //ввод элементов массива { cout << "Input rows of matrix:\n"; for (int i = 0; i < n; i++) { cout << i + 1 << ": "; for (int j = 0; j < n; j++) cin >> ar[i][j]; } } void outp(int n) //вывод элементов массива { cout << "Elements of matrix:\n"; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) cout << ar[i][j] << " "; cout << endl; } } bool isEqual(int n, int j1, int j2)//проверка на равенство столбцов { bool res = true; for (int i = 0; i < n; i++) { if (ar[i][j1] != ar[i][j2]) { res = false; break; } } if (res)//если столбцы равны Flag[j2] = true; /*отмечаем столбец как просмотренный, чтобы в следующий раз его не сравнивать с другими столбцами*/ return res; } void calculate(int n)//считаем количество совпадающих столбцов { int k = 1; for (int j1 = 0; j1 < n; j1++) if (!Flag[j1]) { k = 1; for (int j2 = j1 + 1; j2 < n; j2++) if (!Flag[j2] && isEqual(n, j1, j2)) k++; if (k > 1)//имеется k одинаковых стобцов по типу столбца j1 result += k;//плюсует к итоговому результату } } int main(){ cout << "Input n: "; cin >> n; create(n); inp(n);//ввод массива outp(n);//вывод массива calculate(n);//расчет того, что требуется if (result > 0)/*количество столбцов, которые совпадают, по крайней мере, с одним из других столбцов*/ cout << "The number of columns, coinciding with at least one other column, is " << result << endl; else //все столбцы разные cout << "There is no matching columns\n"; return 0; }
program project215;
uses
crt;
var a:array[1..100] of integer;
i,j,k:integer;
begin
randomize;
j:=0;
k:=0;
for i:=1 to 100 do
begin
a[i]:=random(100)-50;
writeln(a[i]);
if i mod 10=0 then writeln;
if a[i]>0 then j:=j+1
else
begin
if k<j then k:=j;
j:=0;
end;
end;
write('Максимальная последовательность положительных элементов: ',k);
Readln;
end.
Объяснение: