Полагаю ответ кроется в нахождении элемента в этом списке, который и повторяется ровно столько количество раз, скольки и равен индекс данного выражения. Т.е. если у нас 5 утверждений, то утверждение с "1" будет правдиво для себя же. Если у нас будет 2 утверждения с двойками, то они могут ссылаться друг на друга соответственно.
Если будет четыре "4", то они также могут ссылаться друг на друга, что они правдивы и тогда можно заверить, что они верны.
Полагаю ответ кроется в нахождении элемента в этом списке, который и повторяется ровно столько количество раз, скольки и равен индекс данного выражения. Т.е. если у нас 5 утверждений, то утверждение с "1" будет правдиво для себя же. Если у нас будет 2 утверждения с двойками, то они могут ссылаться друг на друга соответственно.
Если будет четыре "4", то они также могут ссылаться друг на друга, что они правдивы и тогда можно заверить, что они верны.
Программа (C++):
#include <iostream>
#include <map>
using namespace std;
int main()
{
setlocale(LC_ALL, "Russian");
int result=0;
int n, elem;
list<int> list_elems;
map<int, int> elems_map;
cout << "Введите N\n";
cin >> n;
cout << "Введите числа в утверждениях\n";
for (int i = 0; i < n; i++) {
cin >> elem;
list_elems.push_back(elem);
}
for (auto const& f : list_elems)
elems_map[f]++;
for (auto const& b : elems_map) {
if (b.first == b.second && result < b.first)
result = b.first;
}
if (result == 0)
cout << -1;
else
cout << result << " правдивы";
return 0;
}
На PascalABC.NET, потому что в остальных паскалях функция не может вернуть массив, а по условию она должна его заполнять.
function Init(n: integer): array of integer;
begin
Result := new integer[n];
Result[0] := 9;
for var k := 1 to Result.High do
Result[k] := (5 * Result[k-1] + 7) mod 1000;
end;
function IsSumM(n, M: integer): boolean;
begin
var s := 0;
while n > 0 do
begin
s += n mod 10;
n := n div 10
end;
Result := s = M
end;
begin
var (n, M) := ReadInteger2('Введи n и М');
Init(n).Println.Where(p -> IsSumM(p, M)).Println
end.