StudioArtNails
?>

Имеются две монеты — одна настоящая, вторая фальшивая. есть два человека, которые знают, какая из монет фальшивая. один из них — либо “лжец”, либо “правдец” (то есть либо всегда лжет, либо всегда говорит правду), а второй — “хитрец”, то есть человек, который говорит правду и ложь строго поочередно (то есть либо на нечётные вопросы отвечает ложью, а на чётные — правдой, либо, наоборот, на нечётные говорит правду, а на чётные — лжет проблема в том, что неизвестно, кто из них хитрец. вы имеете право задать два вопроса одному из людей. как вам выявить фальшивую монету

Информатика

Ответы

Korobeinikov-Yulich23
Либо всегда говорит правду
Феофанов_Никита1067
Первый вопрос: "Эта монета настоящая?" Второй вопрос: "Твой сосед - хитрец?" 
И только после второго ответа начинаем мыслить. 
- Если на второй вопрос ответ "да", то ответчик не лжец (потому, что тогда ответ правдив). Значит, или он хитрец, который соврал отвечая на второй вопрос, или он правдивец. В обоих случаях, ответ на первый вопрос - правда. - Если на второй вопрос ответ "нет", то ответчик не правдивец (так как это была бы ложь). Значит, он или лжец или хитрец, ответивший правду. Значит, ответ на первый вопрос - ложь.- То есть, если ответ на второй вопрос "да", то монета настоящая, а если ответ "нет", то фальшивая.
tsypant
1. Создаем файл MatInt.pas следующего содержания:

// PascalABC.NET 3.1, сборка 1230 от 27.04.2016
unit MatInt;

interface

type
  Matrix=array[,] of integer;

function MatCreate(m,n:integer):Matrix;
procedure MatPrint(a:Matrix;w:integer);
procedure MatMax(a:Matrix;var x,imax,jmax:integer);

implementation

function MatCreate(m,n:integer):Matrix;
// создает матрицу и инициализирует её нулями
begin
  SetLength(Result,m,n);
end;

procedure MatPrint(a:Matrix;w:integer);
// выводит матрицу, отводя w позиций под элемент
begin
  var n:=Length(a,1)-1;
  for var i:=0 to Length(a,0)-1 do begin
    for var j:=0 to n do Write(a[i,j]:w);
    Writeln
    end
end;

procedure MatMax(a:Matrix;var x,imax,jmax:integer);
// возвращает значение максимального элемента и его координаты
begin
  imax:=0; jmax:=0;
  var n:=Length(a,1)-1;
  for var i:=0 to Length(a,0)-1 do
    for var j:=0 to n do
      if a[i,j]>a[imax,jmax] then (imax,jmax):=(i,j);
  Inc(imax); Inc(jmax); x:=a[imax-1,jmax-1]
end;

end.

2. Компилируем файл, получая библиотеку MatInt.pcu

3. Пишем основную программу:

// PascalABC.NET 3.1, сборка 1230 от 27.04.2016
uses
  MatInt;
begin
  var a:=MatCreate(5,8);
  var n:=Length(a,1)-1;
  for var i:=0 to Length(a,0)-1 do
  for var j:=0 to n do a[i,j]:=Random(-50,50);
  MatPrint(a,4);
  var irow,jcol,max:integer;
  MatMax(a,max,irow,jcol);
  Writeln('Максимальный А[',irow,',',jcol,']=',max)
end.

Тестовое решение
  11 -16  11  16  23  -4 -17 -34
 -12  -5  20   9  16  47  43  17
 -46 -26  47 -40  12 -31 -25  13
  -7  39 -20  26  11 -19  32 -15
  45 -10 -28  31 -46 -29 -29 -22
Максимальный А[2,6]=47
gulsinatahckeeva
//PascalABC.NET 3.1 сборка 1239
var
    brackets: array [0..2, 0..1] of char := (('{', '}'), ('[', ']'), ('(', ')'));

begin
    var s := ReadlnString();
    var counter := 0;
    var max_depth := 0;
    
    for var i := 1 to s.Length do
    begin
        if s[i] = '(' then counter += 1
        else if s[i] = ')' then counter -= 1
        else continue;
        if counter < 0 then begin
            writeln('brackets error');
            Halt;
        end;
        if counter > max_depth then max_depth := counter;
    end;
    
    counter := 0;
    for var i := 1 to s.Length do
    begin
        if s[i] = '(' then counter += 1
        else if s[i] = ')' then counter -= 1
        else continue;
        
        if (counter = max_depth - 1) and (s[i] = '(') then s[i] := brackets[1, 0]
        else if (counter = max_depth - 2) and (s[i] = ')') then s[i] := brackets[1, 1]
        else if (counter = max_depth - 2) and (s[i] = '(') then s[i] := brackets[0, 0]
        else if (counter = max_depth - 3) and (s[i] = ')') then s[i] := brackets[0, 1];
    end;
    
    writeln(s);
end.

Ответить на вопрос

Поделитесь своими знаниями, ответьте на вопрос:

Имеются две монеты — одна настоящая, вторая фальшивая. есть два человека, которые знают, какая из монет фальшивая. один из них — либо “лжец”, либо “правдец” (то есть либо всегда лжет, либо всегда говорит правду), а второй — “хитрец”, то есть человек, который говорит правду и ложь строго поочередно (то есть либо на нечётные вопросы отвечает ложью, а на чётные — правдой, либо, наоборот, на нечётные говорит правду, а на чётные — лжет проблема в том, что неизвестно, кто из них хитрец. вы имеете право задать два вопроса одному из людей. как вам выявить фальшивую монету
Ваше имя (никнейм)*
Email*
Комментарий*

Популярные вопросы в разделе

prik-galina7390
triumfmodern
rusplatok
korotinadasha07
mbobo28311
sharkova1443
Strelkov-Roman1263
Valentinovna
Максим_Нина
kuharhuks
madina27821667
Femida76
vifslafes
mnkrasnova
NarekAlekseevich779