10 / 10 / 1
Регистрация: 27.06.2013
Сообщений: 151

Нужен совет по решению - из двух натуральных чисел составить одно наименьшее.

04.07.2013, 16:01. Показов 2401. Ответов 15
Метки нет (Все метки)

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

Ввод:
125
34
Вывод:
12345

C++
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
#include <stdio.h>;
#include <iostream>;
 
using std::cin;
using std::cout;
 
int main (void)
{
    freopen("input.txt","r",stdin);
    freopen("output.txt","w",stdout);
        char A[256], B[256];
    cin >> A >> B;
    for(int i=0, z=0; ; )
    {
        if(!A[i] && !B[z]) break;
        if(!A[i]) { cout << B[z]; z++; continue;}
        if(!B[z]) { cout << A[i]; i++; continue;}
        if( A[i]==B[z] ) 
        { 
            if(A[i+1]=='\0' ) { cout << B[z]; z++; continue; }
            if(B[z+1]=='\0' ) { cout << A[i]; i++; continue; }
            if(A[i+1]<B[z+1]) { cout << A[i]; i++; } 
            else { cout << B[z]; z++; } continue; 
        }       
        if( A[i]<B[z]) { cout << A[i]; i++; }
        else { cout << B[z]; z++; }
    }
    return 0;
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.07.2013, 16:01
Ответы с готовыми решениями:

Вычислить наименьшее общее кратное двух натуральных чисел
Написать программу, вычисляющую наименьшее общее кратное двух натуральных чисел a) Найти max (a, b). Числа a, b должны вводится с...

Определить наименьшее общее кратное двух натуральных чисел
вот мой код. выдаёт одну ошибку. помогите пожалуйста найти. #include&lt;iostream.h&gt; main(int nok) { int a, b, nod, nok; ...

Вычислить НОК (наименьшее общее кратное) двух натуральных чисел A и B
Задача 7. Вычислить НОК (наименьшее общее кратное) двух натуральных чисел A и B.

15
Эксперт С++
 Аватар для Thinker
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
04.07.2013, 16:05
обычное слияние, только здесь цифры не обязательно упорядочены
1
10 / 10 / 1
Регистрация: 27.06.2013
Сообщений: 151
04.07.2013, 16:12  [ТС]
Цитата Сообщение от Thinker Посмотреть сообщение
обычное слияние, только здесь цифры не обязательно упорядочены
Нет!!!! Это не обычное слияние. Прочтите внимательные!!! Если хотите приведите пример решения!!
0
Эксперт С++
 Аватар для Thinker
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
04.07.2013, 16:14
ну как же не обычное, смысл тот же (пусть изначально данные и не упорядочены, там другой порядок нужен):
C++
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
#include<stdio.h>
 
void F(char *a, char *b, char *c)
{
   int i, j, k;
   for(i = j = k = 0; a[i] && b[j]; )
      if (a[i] < b[j])
         c[k++] = a[i++];
      else c[k++] = b[j++];
   if (a[i])
      while(a[i])
         c[k++] = a[i++];
   else
      while(b[j])
         c[k++] = b[j++];
   c[k] = '\0';                      
}
 
int main()
{
   char a[] = "125", b[] = "34", c[256];
   F(a, b, c);
   puts(c);
   return 0;      
}
1
10 / 10 / 1
Регистрация: 27.06.2013
Сообщений: 151
04.07.2013, 16:25  [ТС]
Цитата Сообщение от Thinker Посмотреть сообщение
ну как же не обычное, смысл тот же (пусть изначально данные и не упорядочены, там другой порядок нужен)
При слияние нужно сохранять порядок следования цифр в этих числах
0
Эксперт С++
 Аватар для Thinker
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
04.07.2013, 16:27
Цитата Сообщение от ALEXKIRNAS Посмотреть сообщение
При слияние нужно сохранять порядок следования цифр в этих числах
так порядок и сохраняется, в этом то и есть смысл слияния, как вы не поймете. Даже если изначально данные не были упорядочены, при таком слиянии они сохранят порядок и число будет минимальным при таком условии. с адресами красивее получается:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include<stdio.h>
 
void F(char *a, char *b, char *c)
{
   while(*a && *b)
      if (*a < *b)
         *c++ = *a++;
      else *c++ = *b++;
   if (*a)
      while(*a)
         *c++ = *a++;
   else
      while(*b)
         *c++ = *b++;
   *c = '\0';                        
}
 
int main()
{
   char a[] = "125", b[] = "34", c[256];
   F(a, b, c);
   puts(c);
   return 0;      
}
1
What a waste!
 Аватар для gray_fox
1610 / 1302 / 180
Регистрация: 21.04.2012
Сообщений: 2,733
04.07.2013, 16:29
Цитата Сообщение от ALEXKIRNAS Посмотреть сообщение
При слияние нужно сохранять порядок следования цифр в этих числах
Ну так он сохранится, в стандарной библиотеке даже есть отдельный алгоритм для этого...
1
10 / 10 / 1
Регистрация: 27.06.2013
Сообщений: 151
04.07.2013, 16:42  [ТС]
Цитата Сообщение от Thinker Посмотреть сообщение
так порядок и сохраняется, в этом то и есть смысл слияния, как вы не поймете. Даже если изначально данные не были упорядочены, при таком слиянии они сохранят порядок и число будет минимальным при таком условии. с адресами красивее получается
А при вводе 32545 32545 будет 3232545545 а нужно 3232545455
Внимательные прочти задачу!
0
89 / 1 / 3
Регистрация: 04.07.2013
Сообщений: 282
04.07.2013, 16:51
не ну вы чё совсем с ума посходили вот очень просто прям простейши
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
using namespace std;
int main()
{
    int a,b;
    cin >> a;
    cin >> b;
    for(int i = a;i < b;i++)
    {
        cout << i << endl;
    }
}
0
10 / 10 / 1
Регистрация: 27.06.2013
Сообщений: 151
04.07.2013, 17:02  [ТС]
Цитата Сообщение от svk2140 Посмотреть сообщение
не ну вы чё совсем с ума посходили вот очень просто прям простейши
Я забил упомнить что ограничение 10255.
У вас даже на контрольном примере не работает!!!!
0
89 / 1 / 3
Регистрация: 04.07.2013
Сообщений: 282
04.07.2013, 17:05
Цитата Сообщение от ALEXKIRNAS Посмотреть сообщение
Я забил упомнить что ограничение 10255.
ну так просто больше ресурсов дать)

Добавлено через 55 секунд
Цитата Сообщение от ALEXKIRNAS Посмотреть сообщение
Я забил упомнить что ограничение 10255.
У вас даже на контрольном примере не работает!!!!
всё у меня работает я что совсем чтоли не проверенные коды давать просто у тя наверное не win7
0
Эксперт С++
 Аватар для Thinker
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
04.07.2013, 18:13
Цитата Сообщение от ALEXKIRNAS Посмотреть сообщение
А при вводе 32545 32545 будет 3232545545 а нужно 3232545455
Внимательные прочти задачу!
какой сердитый просто одно условие надо добавить:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include<stdio.h>
 
void f(char *a, char *b, char *c)
{
   while(*a && *b)
      if (*a < *b || (*a == *b && !(*(b + 1))))
         *c++ = *a++;
      else *c++ = *b++;
   if (*a)
      while(*a)
         *c++ = *a++;
   else
      while(*b)
         *c++ = *b++;
   *c = '\0';                        
}
 
int main()
{
   char a[] = "32545", b[] = "32545", c[256];
   f(a, b, c);
   puts(c);
   return 0;      
}
1
10 / 10 / 1
Регистрация: 27.06.2013
Сообщений: 151
04.07.2013, 18:52  [ТС]
Цитата Сообщение от Thinker Посмотреть сообщение
какой сердитый просто одно условие надо добавить:
Да ответ на этот тест верен. Я изменил твою программу и пустил на чекер. WA на 5 тесте.
Задача: http://acmp.ru/index.asp?main=task&id_task=548.

Изменений код:
C++
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
#include<stdio.h>
#include <iostream>;
 
void f(char *a, char *b, char *c)
{
   while(*a && *b)
      if (*a < *b || (*a == *b && !(*(b + 1))))
         *c++ = *a++;
      else *c++ = *b++;
   if (*a)
      while(*a)
         *c++ = *a++;
   else
      while(*b)
         *c++ = *b++;
   *c = '\0';                        
}
 
int main()
{
    freopen("input.txt","r",stdin);
    freopen("output.txt","w",stdout);
   char a[256], b[256], c[515];
   std::cin >> a >> b;
   f(a, b, c);
   std::cout << c;
   return 0;      
}
0
Эксперт С++
 Аватар для Thinker
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
04.07.2013, 19:28
да, там косяк имеется. а так?
C++
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
#include<stdio.h>
 
int cmp(char *a, char *b)
{
   while (*a && *b && *a == *b)
   {
      ++a;
      ++b;
   }
   return !(*a) ? 1 : (!(*b) ? -1 : (*a < *b ? -1 : 1)); 
}
 
void f(char *a, char *b, char *c)
{
   while(*a && *b)
      if (*a < *b || (*a == *b && cmp(a, b) < 0))
         *c++ = *a++;
      else *c++ = *b++;
   if (*a)
      while(*a)
         *c++ = *a++;
   else
      while(*b)
         *c++ = *b++;
   *c = '\0';                        
}
 
int main()
{
   char a[] = "54", b[] = "55", c[256];
   f(a, b, c);
   puts(c);
   return 0;      
}
1
10 / 10 / 1
Регистрация: 27.06.2013
Сообщений: 151
04.07.2013, 19:45  [ТС]
Вау!!!!!
Thinker - ты гений!!!!!!!
А теперь если не трудно можеш объяснить мне как это всё работает. Я пол дня ломал голову и не мог нечего придумать!!!!
0
Эксперт С++
 Аватар для Thinker
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
04.07.2013, 19:53
не сразу верное решение, так как параллельно другими делами занимаюсь.
пробегаем, как в обычном слиянии цифры, но только отдельно рассматриваем случай равенства соответствующих цифр. например
a = ...5...
b = ...5...
1. если на цифре 5 число a заканчивается, то в с записываем цифру 5 из числа b

2. то же самое, только в 1. a и b меняем местами

3. пробегаем все цифры после 5, пока они равны, например
...5123...
...5123...
то есть пробегаем 5123, затем попадем либо в 1., либо в 2. (только относительно цифры 3), либо в случай, например
...51234...
...51237...
тогда 5 берем из a, так как 4 < 7
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.07.2013, 19:53
Помогаю со студенческими работами здесь

Наименьшее общее кратное (НОК) двух натуральных чисел – это наименьшее число, которое делится нацело на оба ис
Здравствуйте,помогите пожалуйста написать код,спасибо.Наименьшее общее кратное (НОК) двух натуральных чисел – это наименьшее число, которое...

Найти наименьшее общее кратное двух натуральных чисел
program jhggd; var A, B, i, c,l,x: integer;h: real; begin writeln('Введите целые неотрицательные числа A и B:'); readln(A, B); if...

Нужен совет по решению
dy/dx=(y/x)-(x/y) Подскажите, как это решается.

Найти наименьшее общее кратное двух заданных натуральных чисел
Найти наименьшее общее кратное двух задан¬ных натуральных чисел

Найти НОК (наименьшее общее кратное) двух натуральных чисел
Найти НОК (наименьшее общее кратное) двух натуральных чисел.


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

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

Новые блоги и статьи
Анализ и линтинг кода JavaScript: ESLint, Prettier и JSHint
run.dev 26.04.2025
JavaScript прошёл долгий путь от простого языка для анимации веб-страниц до основы современной веб-разработки. С ростом сложности приложений, увеличением кодовых баз и масштабированием команд. . .
Паттерны в Python: Singleton, Factory и Observer
py-thonny 26.04.2025
Паттерны проектирования — это проверенные временем решения типовых проблем разработки программного обеспечения. Их история берёт начало с книги "Приёмы объектно-ориентированного проектирования. . . .
Исключения в C#: Stack Overflow, Access Violation и Out of memory
stackOverflow 26.04.2025
Исключения в C# — это не только механизм оповещения о проблемах, а целое искусство управления потоком выполнения программы в экстремальных ситуациях. Обычное исключение, например,. . .
Логирование в C# ASP.NET Core с помощью Serilog, ElasticSearch, Kibana
stackOverflow 25.04.2025
Помните те времена, когда для анализа проблемы приходилось подключаться к серверу, искать нужный лог-файл среди десятков других и вручную фильтровать тысячи строк в поисках ошибки? К счастью, эти дни. . .
Структура "железный OnKeyUp" вместо антидребезга. Полностью асинхронный счётчик.
Hrethgir 25.04.2025
Программа для симуляции схемы - Logisim Evolution В общем какое-то время отвлёкся, так было надо, теперь когда запилю это на verilog и FPGA , досоставлю заявку в ФИПС на полезную модель - не готов. . .
Автоматизация Amazon Web Services (AWS) с Boto3 в Python
py-thonny 25.04.2025
Облачные вычисления стали неотъемлемой частью современной ИТ-инфраструктуры, а Amazon Web Services (AWS) занимает лидирующие позиции среди провайдеров облачных услуг. Управление многочисленными. . .
Apache Kafka vs RabbitMQ в микросервисной архитектуре
ArchitectMsa 25.04.2025
Современная разработка ПО всё чаще склоняется к микросервисной архитектуре — подходу, при котором приложение разбивается на множество небольших, автономных сервисов. В этой распределённой среде. . .
Параллельное программирование с OpenMP в C++
NullReferenced 24.04.2025
Параллельное программирование — подход к созданию программ, когда одна задача разбивается на несколько подзадач, которые могут выполняться одновременно. Оно стало необходимым навыком для. . .
Цепочки методов в C# с Fluent API
UnmanagedCoder 24.04.2025
Современное программирование — это не только решение функциональных задач, но и создание кода, который удобно поддерживать, расширять и читать. Цепочки методов и Fluent-синтаксис в C# стали мощным. . .
Мульти-тенантные БД с PostgreSQL Row Security
Codd 23.04.2025
Современные облачные сервисы и бизнес-приложения всё чаще обслуживают множество клиентов в рамках единой программной инфраструктуры. Эта архитектурная модель, известная как мульти-тенантность, стала. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru