Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
10 / 10 / 1
Регистрация: 27.06.2013
Сообщений: 151

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

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

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

Ввод:
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
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru