Под локальным максимумом, скорее всего, имеется в виду число, большее
чем оба его соседа, за исключением случая, когда соседом справа является
0. В таком случае достаточно однократно пройтись по всем числам, запоминая минимальное из расстояний между новым и предыдущим обнаруженными максимумами.
Программа (язык Pascal ABC.Net)
var i1,i2,i3:integer;
i:integer;
curr,minr,lastmax:integer;
begin
readln(i1,i2);
i:=2;
minr:=1000000;
repeat
readln(i3);
if (i2>i1) and (i2>i3) and (i3<>0) then begin
curr:=i-lastmax;
if curr<minr then minr:=curr;
lastmax:=i;
end;
i1:=i2;
i2:=i3;
i+=1;
until i2=0;
if minr=1000000 then writeln(0) else writeln(minr); {стоило бы добавить булевую переменную в качестве флага - был ли хоть один max, но вряд ли расстояние между ними превысит миллион :-}
end.
<u>PascalABC.NET 3.3.5, сборка 1650 от 01.04.2018</u>
<u>Внимание! Если программа не работает, обновите версию!</u>
begin
ArrRandom(5,0,15).Println.Aggregate(1,(p,q)->p*q).Println
end.
<u>Пример</u>
6 13 7 2 7
7644
Эм... можно подробнее построить вопрос?
#include <iostream>
#include <string>
using namespace std;
bool isb(char t)
{
bool f=false;
string dic="abcdefghijklmnopqrstuvwxyz1234567890";
for(int i=0;i<dic.size();i++)
if(dic[i]==t)
return !f;
return f;
}
int main()
{
string s;
int i=0;
getline(cin,s);
while(i<s.size())
{
if(isb(s[i]))
{
s.insert(i,1,s[i]);
i++;
}
i++;
}
cout<<s<<endl;
return 0;
}
При таком раскладе количество комбинаций будет равно 63.