Форум программистов, компьютерный форум, киберфорум
Free Pascal
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
25 / 25 / 5
Регистрация: 21.11.2013
Сообщений: 208
1

Максимальное число

09.01.2014, 16:04. Показов 937. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Требуется написать программу, которая из цифр двух натуральных чисел создает наибольшее возможное число, сохраняя при этом порядок следования цифр в этих числах.
Входные данные:
Входной поток содержит два натуральных числа, записанных в двух строках. Числа больше нуля и меньше 10^255.

Выходные данные:
В единственную строку выходного потока нужно вывести наибольшее возможное число, удовлетворяющее условию задачи.

Пример входного файла (input.txt):
523
74
Пример выходного файла (output.txt):
75423
Уже создавал тему тут, был предложен такой код
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
var s1,s2,s3:string;
c:char;
i,j,k,d,n1,n2:longint;
begin
readln(s1);
readln(s2);
n1:=length(s1);
   n2:=length(s2);
   i:=1; j:=1;
   while (i<=n1)and(j<=n2) do
      if s1[i]>s2[j] then begin
         write(s1[i]);
         inc(i);
      end
      else begin
         write(s2[j]);
         inc(j);
      end;
   for k := i to n1 do write(s1[k]);
   for k := j to n2 do write(s2[k]);
end.
Не проходит часть тестов. Проблема в том, что на некоторых тестах код работает некорректно.
Например на тест
777
7999
программа выводит правильный ответ 7999777
А на тест
7999
777
Выводит ответ 7777999
Помогите исправить
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.01.2014, 16:04
Ответы с готовыми решениями:

Выведите одно целое число — максимальное число, которое могло получиться в протоколе при игре на данном поле
У Пети имеется игровое поле размером 3×3 , заполненное числами от 1 до 9. В начале игры он может...

Вывести максимальное число
Всем привет))начал решать задачку и тут возникла трудность))код создал,но программка работает...

Найти минимальное и максимальное целое число
В заданной строке найти минимальное и максимальное целое число (числа могут быть отрицательными, в...

Найти максимальное и минимальное число в массиве
:wall:Помогите : Найти максимальное и минимальное число в масиве; при помощи Этого var max,...

4
Эксперт С++
4727 / 2548 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
09.01.2014, 21:44 2
Цитата Сообщение от max_besheniy Посмотреть сообщение
Проблема в том, что на некоторых тестах код работает некорректно.
Вам нужно реализовать следующее:
Если две цифры равные, то нужно пройтись по этим числам и посмотреть у какого числа ближе стоит цифра превышающая первые сравниваемые цифры, у этого числа и выводить. Вот примеры:
777
77779
Здесь первая превышающая семерку цифра 9 у второго числа, поэтому нужно выводить цифру второго числа.

777821
777799
Здесь первая превышающая семерку цифра 8 у первого числа, поэтому нужно выводить цифру первого числа.

777499
7777588
Здесь в обоих случаях первые цифры после семерок меньше самих семерок, поэтому выводить без разницы.

777921
777855
Здесь превышающие семерку у обоих чисел на одинаковом расстоянии, но 9 больше чем 8, поэтому выводить нужно цифру первого числа.

7779...
7779...
Здесь точками показаны следующие цифры чисел, и выводить нужно сравнив эти числа далее. Например:
7779
77799
нужно выводить цифру второго числа

77798
77799
нужно выводить цифру второго числа

77792...
77793...
здесь выводить без разницы
0
25 / 25 / 5
Регистрация: 21.11.2013
Сообщений: 208
09.01.2014, 22:42  [ТС] 3
Этот принцип я понял, но мне кажется, что с реализацией придется туго

Добавлено через 17 минут
Не могли бы ли вы набросать некое подобие реализации этого блока с действиями при встрече двух одинаковых цирф?

Добавлено через 24 минуты
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
var s1,s2,s3:string;
c:char;
i,j,k,d,n1,n2,g:longint;
begin
readln(s1);
readln(s2);
n1:=length(s1);
   n2:=length(s2);
   i:=1; j:=1;
   while (i<=n1)and(j<=n2) do
      if s1[i]>s2[j] then begin
         write(s1[i]);
         inc(i);
      end
      else 
      if s1[i]<s2[j] then begin
         write(s2[j]);
         inc(j);
      end
      else begin
         c:=s1[i];
         g:=0;
         while(s1[i+g]=s2[j+g])and(s1[i+g]=c)and(i+g<=n1)and(j+g<=n2) do
           inc(g);
         if (i+g=n1)or((s1[i+g]<=s2[j+g])) then begin write(s2[j]);inc(j);end;
         if (j+g=n2)or((s1[i+g]>s2[j+g])) then begin write(s1[i]);inc(i);end;
         
      end;
   for k := i to n1 do write(s1[k]);
   for k := j to n2 do write(s2[k]);
end.
Кое-что дописал, теперь 72% проходит. Помогите найти неточность
0
Эксперт С++
4727 / 2548 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
10.01.2014, 18:55 4
Я предлагаю такой вариант (вроде должен пройти):
Pascal
1
2
3
4
5
while(j+g<=n2) and (i+g<=n1)and (s1[i+g]=s2[j+g]) do
           inc(g);
         if (i+g=n1)or((s1[i+g]<s2[j+g])) then begin write(s2[j]);inc(j);end
         else
         begin write(s1[i]);inc(i);end;
1
25 / 25 / 5
Регистрация: 21.11.2013
Сообщений: 208
10.01.2014, 22:09  [ТС] 5
Спасибо, прошло
0
10.01.2014, 22:09
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.01.2014, 22:09
Помогаю со студенческими работами здесь

Определить максимальное целое число n, удовлетворяющее условию
Не получается написать программу( Определить максимальное целое число n, удовлетворяющее условию...

Вывести число повторяющееся максимальное количество раз элементов вектора
Создать вектор случайных чисел и вывести число повторяющееся максимальное количество раз....

В данном массиве чисел выведете максимальное четное, и минимальное нечетное число
Пожалуйста пропишите исходный код для FreePascal: В данном массиве чисел выведете максимальное...

Определить максимальное число встреч спортсменов при однократном прохождении маршрута
Для тренировки спортсменов-лыжников выбран маршрут по следующей траектории: первый спортсмен - по...

Определить максимальное число возможных встреч спортсменов при однократном прохождении маршрута
Для тренировки спортсменов-лыжников выбран маршрут по следующей траектории: оба спортсмена по...

Дан массив из 20 элементов.выяснить какое число находится левее: максимальное или минимальное
дан массив из 20 элементов.выяснить какое число находится левее: максимальное или минимальное


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru