Форум программистов, компьютерный форум, киберфорум
Наши страницы
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
user1357
0 / 0 / 0
Регистрация: 06.11.2017
Сообщений: 12
1

Написать программу, которая будет составлять число, которое читается одинаково как слева направо, так и справа налево

25.12.2017, 10:47. Просмотров 1977. Ответов 6
Метки нет (Все метки)

Текст задачи:
"На вход программе подается набор символов, заканчивающийся
символом 0 (в программе на языке Бейсик символы можно вводить по
одному в строке, пока не будет введен ноль, или считывать данные из
файла). Ноль в этом наборе единственный. Среди этих символов
обязательно присутствуют другие десятичные цифры. Напишите
эффективную, в том числе и по используемой памяти, программу (укажите
используемую версию языка программирования, например, Borland Pascal
7.0), которая будет составлять из имеющихся цифр число максимальной
длины, которое читается одинаково как слева направо, так и справа налево.
Нулей в числе быть не должно (ноль является признаком окончания ввода,
а не одним из символов). Если таких чисел несколько, то надо вывести
минимальное из них. Все имеющиеся в наборе цифры использовать не
обязательно, но количество цифр в ответе должно быть максимально
возможным."
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.12.2017, 10:47
Ответы с готовыми решениями:

Определить является ли заданный текст симметричным (читается одинаково слева направо и справа налево)
Дан текст из 20 символов. Определить является ли он симметричным (читается одинаково слева направо...

Является ли число одинаково читающимся как справа налево, так и наоборот?
Установить, является ли заданное натуральное число n палиндромом (одинаково читается как слева...

Определить в тексте слова, которые можно читать слева направо и справа налево (Анна, шалаш и т.д.).
Помогите пожалуста решить. Задача: Определить в тексте слова, которые можно читать слева направо...

Составить из имеющихся четных цифр максимальное число, читающееся одинаково слева направо и наоборот
На вход подается набор символов, оканчивающийся точкой. Количество символов не превышает 200....

Слова, одинаково читающиеся справа налево и слева направо
Дана строка, состоящая из слов, разделенных пробелами (одним или несколькими). Составить программу...

6
Joy
Эксперт Pascal/Delphi
2254 / 1251 / 1469
Регистрация: 29.08.2014
Сообщений: 4,558
03.01.2018, 09:15 2
так что-ли?
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
var
  a:array[0..9] of integer;
  i,j,k:integer;
  s:string;
  c:char;
begin
  repeat
    read(c);
    inc(a[ord(c)-48]);
  until c=#48;
  for i:=9 downto 1 do begin
    for j:=1 to a[i] div 2 do s:=s+chr(i+48);
    if (a[i] mod 2=1) and (k=0) then k:=i;
  end;
  s:=s+chr(k+48);
  for i:=length(s)-1 downto 1 do s:=s+s[i];
  writeln(s);
end.
Добавлено через 2 минуты
или так:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
var
  a:array[0..9] of integer;
  i,j,k:integer;
  s:string;
  c:char;
begin
  repeat
    read(c);
    inc(a[ord(c)-48]);
  until c=#48;
  for i:=1 to 9 do begin
    for j:=1 to a[i] div 2 do s:=s+chr(i+48);
    if (a[i] mod 2=1) and (k=0) then k:=i;
  end;
  s:=s+chr(k+48);
  for i:=length(s)-1 downto 1 do s:=s+s[i];
  writeln(s);
end.
0
Puporev
Модератор
58084 / 44190 / 30528
Регистрация: 18.05.2008
Сообщений: 105,821
03.01.2018, 09:40 3
По моему нужно в строке посчитать символы, встречающиеся четное число раз, из них можно составить палиндром длины L=общее количество этих символов. Если в строке есть символы(символ), встречающиеся нечетное число раз то L:=L+1;
Из последних выбираем максимальный и ставим его в середину строки. Остальные символы начиная с самого маленького расставляем парами симметрично середины.
0
Joy
Эксперт Pascal/Delphi
2254 / 1251 / 1469
Регистрация: 29.08.2014
Сообщений: 4,558
03.01.2018, 10:11 4
Цитата Сообщение от Puporev Посмотреть сообщение
Из последних выбираем максимальный и ставим его в середину строки
не согласен, т.к. ТС нужно минимальное число.

Добавлено через 1 минуту
собственно, как Вы написали так я и изобразил в коде.
0
Puporev
Модератор
58084 / 44190 / 30528
Регистрация: 18.05.2008
Сообщений: 105,821
03.01.2018, 10:12 5
А, да, это количество цифр максимальное, а число минимальное, перепутал. Тогда все наоборот.
0
user1357
0 / 0 / 0
Регистрация: 06.11.2017
Сообщений: 12
11.01.2018, 16:36  [ТС] 6
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
var
  a:array[0..9] of integer;
  i,j,k:integer;
  s:string;
  c:char;
begin
  repeat
    read(c);
    inc(a[ord(c)-48]);
  until c=#48;
  for i:=9 downto 1 do begin
    for j:=1 to a[i] div 2 do s:=s+chr(i+48);
    if (a[i] mod 2=1) and (k=0) then k:=i;
  end;
  s:=s+chr(k+48);
  for i:=length(s)-1 downto 1 do s:=s+s[i];
  writeln(s);
end.
Можете описать алгоритм? Пока только начинаю работу с символами в паскале.
0
GHackwrench
0 / 0 / 0
Регистрация: 12.01.2018
Сообщений: 12
12.01.2018, 20:06 7
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
program RawTcherv;
 
function IncPost(var I:integer):integer;
begin
  Result:=I;
  Inc(I);
end;
 
// из символов 1...9 из входной строки составить палиндром с минимальным значением
function MakeMinPalindromeMaxLength(const S:string):string;
var
  A:array[1..9] of byte;
  I,J,Fino,Cur,Center:integer;
begin
  FillChar(A{%H-},sizeof(A),0);
  // вычисляем количество разных цифр, встреченных во введённой строке
  For I:=1 to Length(S) do
    if S[I] in ['1'..'9'] then
      Inc(A[ord(S[I])-ord('0')])
    else
      break;
  // максимальная длина палиндрома равна длине строки
  Cur:=1;
  Center:=-1;
  SetLength(Result,Length(S));
  // составляем палиндром. В начало вставляем половину всех цифр от мин. к макс.
  For I:=1 to 9 do begin
    // поиск минимального числа, которое можно вставить в центр
    if (A[I] mod 2=1) and (Center<0) then
      Center:=I;
    // вставляем в начало строки половину символов
    Fino:=A[I] div 2;
    For J:=1 to Fino do
      Result[IncPost(Cur)]:=chr(I+ord('0'));
    // оставшуюся половину вставим потом
    A[I]:=Fino;
  end;
  // вставляем центральный символ
  if Center>0 then
    Result[IncPost(Cur)]:=chr(Center+ord('0'));
  // вставляем в обратном порядке символы палиндрома
  For I:=9 downto 1 do begin
    For J:=1 to A[I] do
      Result[IncPost(Cur)]:=chr(I+ord('0'));
  end;
  // восстанавливаем длину строки
  SetLength(Result,Cur-1);
end;
 
procedure Test(const S:string);
var
  S1:string;
begin
  S1:=MakeMinPalindromeMaxLength(S);
  Writeln('Orig=',S);
  Writeln('Pal =',S1);
  Writeln('Diff=',Length(S)-Length(S1));
  Writeln;
end;
 
begin
  Test('9998888776665432111');
  Readln;
end.
0
12.01.2018, 20:06
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.01.2018, 20:06

Установить, что данное четырехзначное число читается одинаково слева направо и справа налево
Проверить истинность высказывания: &quot;Данное четырехзначное число читается одинаково слева направо и...

Проверить, будет ли число читаться одинаково справа налево и слева направо
Символьная строка содержит одно слово. Проверить, будет ли оно читаться одинаково справа налево и...

Проверить будет ли читаться введенное предложение одинаково справа налево и слева направо
проверить будет ли читаться введеное предложение одинаково справа налево и слева направо.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.