1) синий лежит между оранжевым и зеленым т. е. либо "оранжевый, синий, зеленый", либо "зеленый, синий, оранжевый" 2) синий и оранжевый не лежат рядом, значит либо "оранжевый, желтый, синий, зеленый", либо "зеленый, синий, желтый, оранжевый" 3) слева от желтого лежит карандаш, значит "оранжевый карандаш, желтый, синий, зеленый", либо "зеленый, синий карандаш, желтый, оранжевый" 4) маркер и карандаш не лежат с краю, значит "зеленый, синий карандаш, желтый маркер, оранжевый" 5) фломастер лежит правее ручки и карандаша: "зеленая ручка, синий карандаш, желтый маркер, оранжевый фломастер"
// PascalABC.NET 3.1, сборка 1219 от 16.04.2016 begin var a:=ReadLines('m17.txt').JoinIntoString.ToIntegers; a.Println; var b:=a.Select((x,i)->Rec(x,i)).Where(x->x.Item1<0) .Select(x->x.Item2).ToArray; if b.Count<>2 then Writeln('Количество отрицательных элементов не равно двум') else begin a:=SeqFill(b[0],0).Concat(a.Skip(b[0]).Take(b[1]-b[0]+1)) .Concat(SeqFill(a.Length-b[1]-1,0)).ToArray; a.Println end end.
Файл с исходными данными имеет имя m17.txt. Тестовый файл находится во вложении. Разбивка на строки сделана по 5 значений, но может быть совершенно произвольной. Также нет привязки именно к 17 числам, главное - чтобы отрицательных чисел было ровно два, иначе будет выдано сообщение о их неверном количестве.
1) синий лежит между оранжевым и зеленым т. е. либо "оранжевый, синий, зеленый", либо "зеленый, синий, оранжевый"
2) синий и оранжевый не лежат рядом, значит либо "оранжевый, желтый, синий, зеленый", либо "зеленый, синий, желтый, оранжевый"
3) слева от желтого лежит карандаш, значит "оранжевый карандаш, желтый, синий, зеленый", либо "зеленый, синий карандаш, желтый, оранжевый"
4) маркер и карандаш не лежат с краю, значит "зеленый, синий карандаш, желтый маркер, оранжевый"
5) фломастер лежит правее ручки и карандаша: "зеленая ручка, синий карандаш, желтый маркер, оранжевый фломастер"
begin
var a:=ReadLines('m17.txt').JoinIntoString.ToIntegers;
a.Println;
var b:=a.Select((x,i)->Rec(x,i)).Where(x->x.Item1<0)
.Select(x->x.Item2).ToArray;
if b.Count<>2 then
Writeln('Количество отрицательных элементов не равно двум')
else begin
a:=SeqFill(b[0],0).Concat(a.Skip(b[0]).Take(b[1]-b[0]+1))
.Concat(SeqFill(a.Length-b[1]-1,0)).ToArray;
a.Println
end
end.
Тестовое решение:
23 14 7 15 0 13 -6 41 18 13 8 42 27 -11 3 19 10
0 0 0 0 0 0 -6 41 18 13 8 42 27 -11 0 0 0
Файл с исходными данными имеет имя m17.txt. Тестовый файл находится во вложении. Разбивка на строки сделана по 5 значений, но может быть совершенно произвольной. Также нет привязки именно к 17 числам, главное - чтобы отрицательных чисел было ровно два, иначе будет выдано сообщение о их неверном количестве.