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

Сортировка - C++

Восстановить пароль Регистрация
 
Sharkerator
0 / 0 / 0
Регистрация: 29.12.2010
Сообщений: 16
29.12.2010, 17:55     Сортировка #1
Нужна помощь с этой задачей:
Дано произвольное целое положительное число K (K<10^9). Вывести цифры этого числа в порядке неубывания (например, 546085 =>045568). Процедуры и функции работы со строками не использовать.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.12.2010, 17:55     Сортировка
Посмотрите здесь:

сортировка на С++ C++
Сортировка C++
C++ Сортировка.
C++ Сортировка)
Сортировка C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Алексaндр
 Аватар для Алексaндр
131 / 108 / 5
Регистрация: 04.12.2010
Сообщений: 313
29.12.2010, 18:23     Сортировка #2
Не понял... Строки не использовать???
Sharkerator
0 / 0 / 0
Регистрация: 29.12.2010
Сообщений: 16
29.12.2010, 18:29  [ТС]     Сортировка #3
Алексaндр, ну не использовать функции типа: strcpy(), strcat(), strcmp().
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
29.12.2010, 18:30     Сортировка #4
http://codepad.org/2dVPMTud
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <vector>
#include <algorithm>
 
int main() {
    int n = 148450216;
    std::vector<int> v;
    while ( n ) v.push_back( n % 10 ), n /= 10;
    sort( v.begin(), v.end() );
    for( size_t i = 0; i < v.size(); ++i ) std::cout << v[ i ];
    std::cout << std::endl;
}
Sharkerator
0 / 0 / 0
Регистрация: 29.12.2010
Сообщений: 16
29.12.2010, 18:34  [ТС]     Сортировка #5
outoftime, а в более простом для начинающего виде можно? Ну там с printf и без std, vector и прочим.
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
29.12.2010, 18:39     Сортировка #6
(: все-ровно преподов надули, не смотря на то что строки запретили юзать (:

Добавлено через 36 секунд
Sharkerator, можно, но тогда будет больше кода (:

Добавлено через 1 минуту
Sharkerator, попроси кого-то другого, мне не охота писать некрасивый код
Nameless One
Эксперт С++
 Аватар для Nameless One
5754 / 3403 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
29.12.2010, 18:41     Сортировка #7
Вот, функции и процедуры для работы со строками не использовал, все ручками-с Проверки на корректность вводимого числа нет:
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
#include <stdio.h>
#include <stdlib.h>
 
int cmp(const void* a, const void* b)
{
    char A = *(char*) a;
    char B = *(char*) b;
    if(A < B)
        return 1;
    if(B < A)
        return -1;
    return 0;
}
 
int main()
{
    char buf[9];
    size_t k = 0;
    unsigned long long num;
    printf("Input num: ");
    scanf("%Lu", &num);
    
    if(num >= 1000000000)
    {
        fprintf(stderr, "Illegal number: %Lu\n", num);
        exit(1);
    }
    
    while(num)
    {
        buf[k++] = num % 10 + '0';
        num /= 10;
    }
    
    qsort(buf, k, sizeof(char), cmp);
    
    while(k)
        putchar(buf[--k]);
        
    putchar('\n');
        
    
    exit(0);
}
UPD, добавил проверку числа
Sharkerator
0 / 0 / 0
Регистрация: 29.12.2010
Сообщений: 16
29.12.2010, 18:44  [ТС]     Сортировка #8
outoftime, мне главное понять что написано, а красота и размер сейчас не так важны.


Nameless One, вот тут уже больше понятного, но можно как-нибудь сделать, не используя подпрограмму?
Nameless One
Эксперт С++
 Аватар для Nameless One
5754 / 3403 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
29.12.2010, 18:50     Сортировка #9
Sharkerator, можно, нужно просто самому написать сортировку. Как это сделать - смотрим в этой теме.

Цитата Сообщение от Sharkerator Посмотреть сообщение
можно как-нибудь сделать, не используя подпрограмму?
Кстати, а чем, собственно, подпрограммы не угодили?...
Sharkerator
0 / 0 / 0
Регистрация: 29.12.2010
Сообщений: 16
29.12.2010, 18:55  [ТС]     Сортировка #10
Nameless One, препод заподозрит неладное, что я решил задачу, да еще и с помощью подпрограммы.
Nameless One
Эксперт С++
 Аватар для Nameless One
5754 / 3403 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
29.12.2010, 18:58     Сортировка #11
Sharkerator, так в условии задачи ничего не сказано про то, что нельзя их использовать. А то, что не запрещено - разрешено
Sharkerator
0 / 0 / 0
Регистрация: 29.12.2010
Сообщений: 16
29.12.2010, 19:02  [ТС]     Сортировка #12
Nameless One, да не в этом дело. Просто я в подпрограммах не разбираюсь и не смогу объяснить преподу как я решил задачу. И он скажет, что я нагло списал.
Nameless One
Эксперт С++
 Аватар для Nameless One
5754 / 3403 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
29.12.2010, 19:07     Сортировка #13
А ты разберись
Sharkerator
0 / 0 / 0
Регистрация: 29.12.2010
Сообщений: 16
29.12.2010, 19:10  [ТС]     Сортировка #14
Nameless One, к сожалению, пока моего мозга на это не хватает.
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
29.12.2010, 19:19     Сортировка #15
Вот без функций
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
#include <stdio.h>
#include <malloc.h>
 
int main()
{
    int N, _N, *a, cnt = 0, k = 0;
    scanf("%d", &N);
 
    _N = N;
    while(_N)
    {
        int tmp = _N % 10;
        ++cnt;
        _N /= 10;
    }
 
    a = (int *)malloc(sizeof(int) * cnt);
    _N = N;
    while(_N)
    {
        a[k++] = _N % 10;
        _N /= 10;
    }
 
    for(int i = 0; i < cnt; ++i)
    {
        for(int j = i; j < cnt - 1; ++j)
        {
            if(a[j] > a[j + 1])
            {
                int tmp = a[j];
                a[j] = a[j + 1];
                a[j + 1] = tmp;
            }
        }
    }
 
    for(int i = 0; i < cnt; ++i)
        printf("%d", a[i]);
}
Sharkerator
0 / 0 / 0
Регистрация: 29.12.2010
Сообщений: 16
29.12.2010, 19:27  [ТС]     Сортировка #16
asics, тут присутствует неизвестная мне malloc ):
Да и сама программа неправильно выводит числа.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.12.2010, 19:46     Сортировка
Еще ссылки по теме:

Сортировка C++
C++ Сортировка
Сортировка C++

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

Или воспользуйтесь поиском по форуму:
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
29.12.2010, 19:46     Сортировка #17
Цитата Сообщение от Sharkerator Посмотреть сообщение
Да и сама программа неправильно выводит числа.
Точно, вот так вернее будет и без малок
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
#include <stdio.h>
 
#define n 10
 
int main()
{
    int N, _N, a[n], cnt = 0, k = 0;
    scanf("%d", &N);
 
    _N = N;
    while(_N)
    {
        a[k++] = _N % 10;
        _N /= 10;
    }
 
    for(int i = k - 1; i >= 1; --i)
    {
        for(int j = 0; j < k; ++j)
        {
            if(a[j] > a[j + 1])
            {
                int tmp = a[j];
                a[j] = a[j + 1];
                a[j + 1] = tmp;
            }
        }
    }
 
    for(int i = 0; i < k; ++i)
        printf("%d", a[i]);
}
Yandex
Объявления
29.12.2010, 19:46     Сортировка
Ответ Создать тему
Опции темы

Текущее время: 04:46. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru