Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.93/15: Рейтинг темы: голосов - 15, средняя оценка - 4.93
34 / 34 / 8
Регистрация: 22.09.2013
Сообщений: 170
1

лексикографически упорядочены числа

25.01.2014, 20:24. Показов 3087. Ответов 11
Метки нет (Все метки)

В отличие от обычной математики числа здесь упорядочены не по возрастанию, а лексикографически, то есть как в словаре (сначала по первой цифре, затем, при равной первой цифре – по второй, и так далее). В данной науке используется первые N чисел. Так, например, если N=15, то числа в странной математике оказываются упорядочены следующим образом: 1, 10, 11, 12, 13, 14, 15, 2, 3, 4, 5, 6, 7, 8, 9.

надо int переводить в char что бы сортировать как слова по алфавиту ?
или как?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.01.2014, 20:24
Ответы с готовыми решениями:

Отсортировать числа в массиве лексикографически
Есть числа. Пусть это числа 102 211 121 010(Все числа одного размера N. В данном примере N=3) В...

Написать функцию isSorted, принимающую 3 числа и возвращающую True, если числа упорядочены по возрастанию или убыванию
isSorted(1 2 3) -> True isSorted(3 2 1) -> True isSorted(1 3 2) -> False

Упорядочены ли числа в строке по возрастанию
Добрый вечер. Задана строка чисел, нужно проверить является ли она упорядоченной по возрастанию...

Упорядочены ли цифры числа по возрастанию
Дано натуральное число. Установить, является ли последовательность его цифр при просмотре их слева...

11
:)
Эксперт С++
4766 / 3260 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
25.01.2014, 21:21 2
Цитата Сообщение от Жанерке Посмотреть сообщение
надо int переводить в char что бы сортировать как слова по алфавиту ?
Какая конечная цель? Если нужно отсортировать массив чисел, то можно просто написать свою функцию сравнения. Например так:
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 <algorithm>
#include <iostream>
#include <string>
#include <sstream>
#include <vector>
 
int main() {
    
    std::vector<int> v = { 1, 2, 3, 4, 10, 20, 30, 40 };
    
    std::sort( v.begin(), v.end(), [](int l, int r)
        { 
            std::stringstream ss;
            ss << l;
            std::string ls = ss.str();
            ss.str("");
            ss << r;
            return ls < ss.str();
        } );
        
    for( const int i : v )
    {
        std::cout << i << " ";
    }
    std::cout << '\n';
    
    return 0;
}
http://ideone.com/PIy8mJ
1
187 / 180 / 25
Регистрация: 27.01.2012
Сообщений: 1,335
25.01.2014, 21:22 3
Жанерке, вообще, существует четкий алгоритм. Относится к комбинаторике.
Генерация перестановок в лексикографическом порядке
1
319 / 225 / 73
Регистрация: 22.11.2013
Сообщений: 856
Записей в блоге: 1
25.01.2014, 22:24 4
Цитата Сообщение от nexen Посмотреть сообщение
Жанерке, вообще, существует четкий алгоритм. Относится к комбинаторике.
я его не читал, но свой предложу, может корявый немного:

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
#include <iostream>
 
int main()
{
int n,i,j,c=1,z,g;
bool t;
std::cin>>n;
for (i=1; i<=9; i++)
{
c=i;
std::cout<<i<<" ";
g=1;
z=1;
if (c*10<n)
while (c*10<=n) {c*=10; g*=10;}
while (z*10<=n) {z*=10; }
j=i*10;
while (c>=10)
{
  t=(c==z)? (j<=n):(j<(i+1)*g);
while (t)
{
    std::cout<<j<<" ";
    j = (n>=j*10) ? j*10: j+1; 
     t=(c==z)? (j<=n):(j<(i+1)*g);
}
    c/=10;
    g/=10;
if (c>1) j=c+1;
}
}
 
std::system ("Pause");
return 0;
}
Добавлено через 11 минут
поторопился Понимаю что 16 строку целесообразней вынуть за пределы цикла for. Алгоритм составлял руками думая и одновременно набирая
1
44 / 44 / 13
Регистрация: 06.09.2010
Сообщений: 99
26.01.2014, 01:25 5
Для произвольного исходного массива я рискнул бы предложить следующий вариант
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
#include <stdio.h>
 
#define MAX 2000
 
unsigned int source[MAX];
unsigned int bdc[MAX];
 
 
unsigned int invert(unsigned int rv)
{
    unsigned int lv;
    unsigned int add=1;
    lv=rv+0x06*(rv/10)+0x060*(rv/100)+0x0600*(rv/1000)+0x06000*(rv/10000)+0x060000*(rv/100000);
 
    rv=lv;
    do
    {
        rv=rv>>4;
        lv+=add;
        add=add<<4;
    } while(rv);
    while(lv<0x10000000) lv=lv<<4;
    return lv;
}
 
void sort()
{
    unsigned int min,ix,st;
    for (st=0;st<MAX;st++)
    {
        for (ix=st;ix<MAX;ix++)
        {
            if (bdc[ix]<bdc[st])
            {
                min=bdc[ix];
                bdc[ix]=bdc[st];
                bdc[st]=min;
 
                min=source[ix];
                source[ix]=source[st];
                source[st]=min;
            }
        }
    }
}
 
void init()
{
    unsigned int ix;
    for (ix=0;ix<MAX;ix++)
    {
        source[ix]=ix;
        bdc[ix]=invert(ix);
    }
}
 
void dump()
{
    int ix;
    for (ix=0;ix<MAX;ix++)
    {
        printf("%04d : %d\n",ix+1,source[ix]);
    }
}
 
 
int main()
{
    init();
    sort();
    dump();
    return 0;
}
Очевидно, что алгоритм сортировки можно использовать любой. Для функции invert значения исходного массива могут лежать в диапазоне от 0 до 999999. Ну а в данном примере я его забил от 0 до 2000...
1
34 / 34 / 8
Регистрация: 22.09.2013
Сообщений: 170
26.01.2014, 09:07  [ТС] 6
mustimur, в вашем коде если ввести цифру меньше девяти , например 5, оно все равно выводит все 9 цифр. а так прога норм.

всем спасибо за помощь
0
319 / 225 / 73
Регистрация: 22.11.2013
Сообщений: 856
Записей в блоге: 1
26.01.2014, 10:30 7
упс.. Исправить 8 строчку for (i=1; i<=9; i++) заменить на for (i=1; i<=(n>8) ? 9:n; i++)
0
34 / 34 / 8
Регистрация: 22.09.2013
Сообщений: 170
26.01.2014, 14:51  [ТС] 8
mustimur, я там условие и цикл добавила
тож работает)

C++
1
2
3
4
5
............................
if (n<9) for (i=1; i<=n; i++) std::cout<<i<<" ";
else
for (i=1; i<=9; i++)
.......................
0
319 / 225 / 73
Регистрация: 22.11.2013
Сообщений: 856
Записей в блоге: 1
26.01.2014, 15:52 9
Одна задача 100 решений))
0
34 / 34 / 8
Регистрация: 22.09.2013
Сообщений: 170
26.01.2014, 18:25  [ТС] 10
mustimur, как можно результат записать в массив одномерный, что бы можно было сделать поиск и выводить позицию числа .
0
319 / 225 / 73
Регистрация: 22.11.2013
Сообщений: 856
Записей в блоге: 1
26.01.2014, 20:02 11
Лучший ответ Сообщение было отмечено Жанерке как решение

Решение

Цитата Сообщение от Жанерке Посмотреть сообщение
mustimur, как можно результат записать в массив одномерный, что бы можно было сделать поиск и выводить позицию числа .
не совсем понял задачу, вот вместо печати запись в массив:
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 <iostream>
 
int main()
{
int n,i,j,c=1,z,g, ks=0;
bool t;
std::cin>>n;
int *ms = new int[n];
for (i=1; i<=((n>8) ? 9:n); i++)
{
c=i;
ms[ks]=i;
ks++;
g=1;
z=1;
if (c*10<n)
while (c*10<=n) {c*=10; g*=10;}
while (z*10<=n) {z*=10; }
j=i*10;
while (c>=10)
{
  t=(c==z)? (j<=n):(j<(i+1)*g);
while (t)
{
   ms[ks]=j;
   ks++;
    j = (n>=j*10) ? j*10: j+1; 
     t=(c==z)? (j<=n):(j<(i+1)*g);
}
    c/=10;
    g/=10;
if (c>1) j=c+1;
}
}
for (i=0;i<n;i++) std::cout<<ms[i]<<" ";
 
 delete [] ms; 
std::system ("Pause");
return 0;
}
1
34 / 34 / 8
Регистрация: 22.09.2013
Сообщений: 170
26.01.2014, 21:12  [ТС] 12
mustimur, спасибо, все работает.

задача решена, тема закрыта)))))))
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.01.2014, 21:12

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Определить упорядочены ли числа последовательности по убыванию
:wall: Даны натуральные числа A1 А2, ... Признак конца последо* вательности 0. Определить...

Определить упорядочены ли числа последовательности по убыванию
я &quot;Сделал&quot;(слепил) задачу, но она не работает, что можно сделать, чтобы она работала? Даны...

Указать, упорядочены ли числа в массиве по возрастанию.
Помогите написать программы, срочно до вторника следующего нужно, в долгу не останусь, кто сможет...

Проверить, упорядочены ли цифры числа по возрастанию
Доброго времени суток подскажите пожалуйста как это можно реализовать при помощи вложенных циклов?...


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

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

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