PASCAL Напишите программу: Дана последовательность из N элементов. Найти количество...

0 голосов
38 просмотров

PASCAL
Напишите программу: Дана последовательность из N элементов. Найти количество двузначных чисел, в которых одна и только одна из цифр 3ка.


Информатика (89 баллов) | 38 просмотров
Дано ответов: 2
0 голосов
вариант решения, если элементы вводятся
var
  n, i, x, s : integer;
  t: string;
begin
  writeln('количество чисел');
  readln(n);
  s := 0;
  for i := 1 to n do
    begin
      writeln(i,' число:');
      readln(x);
      if (x > 9) and (x<100)) then<br>        begin
          t := 
IntToStr(x);
         if (((t[1] = '3') and
(t[2] <> '3')) or (t[1] <> '3') and (t[2] = '3'))   then s := s+1;
        end;
    end;
    writeln('Ответ ',s)
end.


вариант решения, если элементы заданы массивом
const
n=50
var
  i, x, s : integer;
  t: string;
  m1: array [1..n] of integer;
begin
  s := 0;
  for i := 1 to n do
     begin
      x := m1[i];
      if (x > 9) and (x<100)) then<br>        begin
          t := IntToStr(x);
         if (((t[1] = '3') and
(t[2] <> '3')) or (t[1] <> '3') and (t[2] = '3'))   then s := s+1;
        end;
    end;
    writeln('Ответ ',s)
end.





(1.2k баллов)
0

Даю совет, если ты работал через строку ты мог использовать: условие if pos('3',s)>0

0

все равно потребуется проверять на второе вхождение.

0

Смотри это получается без массива, считывай число в виде строки. Выполняй условие if pos('3',st)>0, т.е. если в числе есть символ '3', позиция будет либо 2 либо 3, это больше 0, условие соблюдается и прибавляй к счётчику 1

0

с массивом - необязательная опция)). эт так, в виде разминки. Позиция будет либо 1 либо 2. Опять же - 33 попадет в разряд допустимых - косяк. Но за реакцию спасибо))

0 голосов

Вот вариант попроще
var
  n, i, s, x  : integer;
begin
  n := 0;
  writeln('kolichestvo chisel');
  readln(n);
  for i := 1 to n do
    begin
      writeln(i,' chislo');
      readln(x);
      if  ((x mod 3 = 0)  and (x div 10 <> 3)) or ((x mod 3 <> 0)  and (x div 10 = 3)) then
        s := s +1;
    end;
    writeln('otvet: ',s);
end.

(282 баллов)
0

согласен. просто люблю с символами работать.

0

не учтен вариант 33 - 2 вхождения тройки

0

Всё, учёл, не прочитал внимательно задание)