Джон и Смит
Объяснение:
1. Допустим дважды правду сказал Джон. Тогда Браун невиновен, а Смит - виновен. Смит, утверждая, что он невиновен, солгал. Он также солгал, обвиняя Брауна. Следовательно Браун один раз сказал правду. Проверим. Браун сказал, что это не он и не Джон, т.е. сказал правду дважды, что противоречит нашему выводу. Следовательно, Джон не мог дважды сказать правду.
2. Допустим, дважды правду сказал Браун. Тогда он невиновен, и Джон невиновен, следовательно, виновен Смит. Смит заявил что он невиновен и солгал. Он также обвинил Брауна и солгал еще раз. Значит, один раз правду сказал Браун. Эту версию мы проверяли выше, следовательно исходное допущение неверно.
3. Методом исключения получаем, что дважды правду сказал Смит. Он невиновен, а виновен Браун. Браун, говоря что он невиновен солгал, а его оправдание Джона - правда. Получается, что дважды солгал Джон. Он оправдал Брауна - и это ложь. Также ложно его обвинение Смита.
Противоречий нет, следовательно невиновны Джон и Смит
While (p<>1)
do begin
readln(p);
{a)} if p mod 7 = 0
then a+=1;
{б)} if (p>10) and (p<=100)
then b+=p;
{в}if (p mod 3 =0) and (p mod 5 = 0)
then s+=p;
end;
...
Это для паскаль ABC или ABC.NET