Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Даня98
28 / 28 / 8
Регистрация: 13.02.2010
Сообщений: 145
#1

Минимальное число - C++

21.10.2011, 19:46. Просмотров 927. Ответов 9
Метки нет (Все метки)

Есть задача, ее условие

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

Входной файл INPUT.TXT содержит два натуральных числа, записанных в двух строках. Числа больше нуля и меньше 10255.

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

Но не проходит несколько тестов - неправльная идея решения. Можете помочь с идеей?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.10.2011, 19:46
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Минимальное число (C++):

Минимальное число в последовательности - C++
Написать программу, которая определяет минимальное число во введенной с клавиатуры последовательности чисел (длина последовательности не...

Минимальное число в матрице - C++
Здравствуйте помогите пожалуйста написать программу для поиска минимального числа в матрице (двумя способами) просто вобше не шарю в...

Найти минимальное число - C++
Вообщем есть 10 переменных.нужно найти какое из них наименьшее.С if слишком громоздко выходит

Минимальное число шагов - C++
Задание такое: Дано целое неотрицательное число N (0<=N<=1000000). С ним можно делать следующее: - увеличить на 1 - уменьшить на 1 ...

Минимальное число белых слонов - C++
Имеется шахматная доска N × M клеток. Некоторые поля на ней заняты белыми фигурами, но не слонами (конь, ладья, король, ферзь) и белыми...

Вычислить за минимальное число операций - C++
Дано действительное число х. Не пользуясь никакими другими арифметическими операциями, кроме умножения, сложения и вычитания, вычислить за...

9
aeshes
440 / 203 / 13
Регистрация: 07.10.2011
Сообщений: 462
21.10.2011, 19:49 #2
А какая у вас идея? мы покритикуем,е сли вы ее изложите и поможем улучшить.
Надеюсь, вы сразу используете строки для хранения своих чисел, а не целые типы?
0
Даня98
28 / 28 / 8
Регистрация: 13.02.2010
Сообщений: 145
21.10.2011, 19:56  [ТС] #3
Цитата Сообщение от aeshes Посмотреть сообщение
Надеюсь, вы сразу используете строки для хранения своих чисел, а не целые типы?
конечно. у меня контр пример есть, но если я меняю программу,то решение все равно неправильное. Ну идея у меня такая: перебираю по порядку все числа второго числа, если у первого числа на позиции x стоит цифра больше чем цифра 2 числа (к), то я увеличиваю позицию, куда вставлять цифру и т.д.

Добавлено через 25 секунд
Цитата Сообщение от aeshes Посмотреть сообщение
мы покритикуем
да критиковать не надо =)
0
soon
2541 / 1306 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
21.10.2011, 20:04 #4
Хм... Если я правильно понял задание, то вот, набросок накидал.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
#include <string.h>
 
int main(void)
{
    char a[] = "1351", b[] = "246";
    int posA = 0, posB = 0;
    while((posA < strlen(a)) && (posB < strlen(b)))
    {
        if(a[posA] < b[posB])
            printf("%c", a[posA++]);
        else
            printf("%c", b[posB++]);
    }
    if(posA == strlen(a))
        for( ; posB < strlen(b); ++posB)
            printf("%c", b[posB]);
    else
        for( ; posA < strlen(a); ++posA)
            printf("%c", a[posA]);
    return 0;
}
Добавлено через 2 минуты
Цитата Сообщение от Даня98 Посмотреть сообщение
да критиковать не надо =)
Ну что же вы, мы не волки. А конструктивная критика никому не помешает.
0
Даня98
28 / 28 / 8
Регистрация: 13.02.2010
Сообщений: 145
21.10.2011, 20:07  [ТС] #5
прошло так-же, как у меня.
0
soon
2541 / 1306 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
21.10.2011, 20:11 #6
Мой код можно сразу же забраковать при комбинации 321 123.
0
valeriikozlov
Эксперт С++
4670 / 2496 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
21.10.2011, 22:46 #7
Даня98,
На мой взгляд самый "трудный" тест в этой задаче это такой:
555555552
555555554
или
555555554
555555552

выкладываю код, который прошел все тесты (сейчас не помню, но может быть там есть что-то лишнее - захотите разберетесь):
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
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#include <stdio.h>
#include <string.h>
char str[260], str1[260];
 
int main( ) {
  freopen("input.txt","r",stdin);
  freopen("output.txt","w",stdout); 
  int i=0, i1=0, len, len1;
  scanf("%s", &str);
  scanf("%s", &str1);
  len=(int)strlen(str);
  len1=(int)strlen(str1);
  while(true)
  {
      if(i==len || i1==len1)
      {
          for(; i<len; i++)
              printf("%c", str[i]);
          for(; i1<len1; i1++)
              printf("%c", str1[i1]);
          break;
      }
      if(str[i]<str1[i1])
      {
          printf("%c", str[i++]);
      }
      else
      {
          if(str[i]>str1[i1])
              printf("%c", str1[i1++]);
          else
          {
              int fl=1;
              for(int j=1; j+i<len && j+i1<len1 && fl==1; j++)
              {
                  if(str[i+j]<str1[i1+j])
                      fl=2;
                  if(str[i+j]>str1[i1+j])
                      fl=3;
              }
              if(fl==1)
              {
                  if(j+i==len)
                  {
                      for(int y=j; y+i1<len1 && fl==1; y++)
                      {
                          if(str[len-1]<str1[i1+y])
                              fl=2;
                          if(str[len-1]>str1[i1+y])
                              fl=3;
                      }
                  }
                  if(j+i1==len1)
                  {
                      for(int y=j; y+i<len1 && fl==1; y++)
                      {
                          if(str1[len1-1]<str[i+y])
                              fl=3;
                          if(str1[len1-1]>str[i+y])
                              fl=2;
                      }
                  }
 
              }
              if(fl==1 || fl==2)
              {
                  printf("%c", str[i++]);
              }
              else
                  printf("%c", str1[i1++]);
          }
      }
  }
  
 
  return 0;
 
 }
1
easybudda
Модератор
Эксперт CЭксперт С++
9663 / 5613 / 952
Регистрация: 25.07.2009
Сообщений: 10,776
22.10.2011, 00:11 #8
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
35
36
37
38
39
#include <stdio.h>
 
#define MAX_LEN 255
#define READ_MASK "%255s"
 
void sorted_split(const char * a, const char * b, char * buf){
    if ( ! *a ){
        if ( ! *b )
            *buf = 0;
        else {
            *buf++ = *b++;
            sorted_split(a, b, buf);
        }
    }
    else {
        if ( ! *b ){
            *buf++ = *a++;
            sorted_split(a, b, buf);
        }
        else {
            if ( *a < *b )
                *buf++ = *a++;
            else
                *buf++ = *b++;
            sorted_split(a, b, buf);
        }
    }
}
 
int main(void){
    char a[MAX_LEN + 1], b[MAX_LEN + 1], buf[MAX_LEN * 2 + 1];
    
    while ( printf("A = ") && scanf(READ_MASK, a) == 1 && printf("B = ") && scanf(READ_MASK, b) == 1 ){
        sorted_split(a, b, buf);
        printf("Result: %s\n", buf);
    }
    
    return 0;
}
0
jds_07
28 / 27 / 1
Регистрация: 12.03.2009
Сообщений: 85
03.11.2011, 15:21 #9
Цитата Сообщение от easybudda Посмотреть сообщение
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
35
36
37
38
39
#include <stdio.h>
 
#define MAX_LEN 255
#define READ_MASK "%255s"
 
void sorted_split(const char * a, const char * b, char * buf){
    if ( ! *a ){
        if ( ! *b )
            *buf = 0;
        else {
            *buf++ = *b++;
            sorted_split(a, b, buf);
        }
    }
    else {
        if ( ! *b ){
            *buf++ = *a++;
            sorted_split(a, b, buf);
        }
        else {
            if ( *a < *b )
                *buf++ = *a++;
            else
                *buf++ = *b++;
            sorted_split(a, b, buf);
        }
    }
}
 
int main(void){
    char a[MAX_LEN + 1], b[MAX_LEN + 1], buf[MAX_LEN * 2 + 1];
    
    while ( printf("A = ") && scanf(READ_MASK, a) == 1 && printf("B = ") && scanf(READ_MASK, b) == 1 ){
        sorted_split(a, b, buf);
        printf("Result: %s\n", buf);
    }
    
    return 0;
}
Не правильно решил. Попробуй задать: 94 95 должно быть: 9495
1
diagon
Higher
1929 / 1195 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
03.11.2011, 15:43 #10
А у меня такой быдлокод получился =(
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <fstream>
char f[257], s[257], r[513], *a = f, *b = s, *c = r, *x, *y;
int main(){
    for (std::fstream("input.txt") >> f >> s ;*a || *b; )
        if (*a - *b) 
            *c++ = !*b ||  *a && *a < *b  ? *a++ : *b++;
        else {
            for (x = a, y = b; *++x == *++y; );
            *c++ = !*y || *x && *x < *y ? *a++ : *b++;
            }
    std::ofstream o("output.txt");
    o << r;
}
2
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.11.2011, 15:43
Привет! Вот еще темы с ответами:

Найти минимальное положительное число - C++
все вычисляет верно, но желательно оптимизировать, может знает кто? #include &lt;iostream&gt; #include &lt;math.h&gt; using namespace std; ...

Минимальное положительное целое число - C++
Братья,нужна помощь. Вычислить минимальное положительное целое число, которое не является точно представимым в типе double. Как найти...

Найти минимальное положительное число. - C++
Помогите решить задачку. Ввести с клавиатуры три вещественных числа. Найти минимальное положительное число. Результат вывести на экран. ...

Задание вычислить за минимальное число операций - C++
Дано действительное число х. Не пользуясь никакими другими арифметическими операциями, кроме умножения, сложения и вычитания, вычислить за...


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

Или воспользуйтесь поиском по форуму:
10
Yandex
Объявления
03.11.2011, 15:43
Ответ Создать тему
Опции темы

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