Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
382 / 330 / 159
Регистрация: 06.12.2010
Сообщений: 894
1

Напишите программу, которая сортирует цифры числа по возврастанию

05.02.2011, 19:04. Просмотров 776. Ответов 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
// Напишите программу, которая сортирует цифры числа по возврастанию
#include <iostream>
#include <conio.h>
#include <vector>
using namespace std;
 
long int exchange(long int n)
{
    vector<int> m;
    while (n>0)
    {
        int tmp = n % 10;
        m.push_back(tmp);
        n/= 10;
    }
 
    for (int i=0; i < m.size();i++)
    {
        for (int j=0; j < m.size()-1;j++)
        {
            if (m[j] < m[j+1])
            {
                int tmp=m[j]; m[j]=m[j+1]; m[j+1]=tmp;
            }
        }
    }
 
 
    long int newNumber = 0;
    for (int i=m.size()-1; i >= 0; i--)
    {
        newNumber = newNumber*10 + m[i];
    }
    return newNumber;
}
 
int main ()
{
  long int number;
 
  cout << "Please enter your number: ";
  cin  >> number;
 
  cout << "Changed number: " << exchange(number);
 
  getch();
  return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.02.2011, 19:04
Ответы с готовыми решениями:

Напишите программу, которая сортирует массив по убыванию суммы цифр числа. Используйте функцию, которая определяет сумму
Напишите программу, которая сортирует массив по убыванию суммы цифр числа. Используйте функцию,...

Напишите программу, которая сортирует натуральные числа, записанные в файле input.txt , по убыванию суммы цифр в десятич
Не работает. Помогите найти ошибки. Напишите программу, которая сортирует натуральные числа,...

Напишите программу, которая определяет, упорядочены ли цифры числа по возрастанию
Помогите пожалуйста не могу решить задачу. Задачу нужно решить на С++ Задача: Напишите...

Напишите программу, которая сортирует массив по возрастанию
Напишите программу, которая сортирует массив по возрастанию. Массив из 10 целых чисел. Вывести...

5
Каратель
Эксперт С++
6595 / 4016 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
05.02.2011, 19:09 2
C++
1
2
3
#include <algorithm>
//....
std::sort(vec.begin(),vec.end());

ну обмен значений поменять на std::swap(a,b);
1
2123 / 1661 / 828
Регистрация: 21.12.2010
Сообщений: 2,949
Записей в блоге: 12
05.02.2011, 19:24 3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include<iostream>
#include<algorithm>
#include<sstream>
using namespace std;
 
int main(){
    string s;
    int number;
    cin>>s;
    sort(s.begin(), s.end());
    stringstream ss(s);
    ss>>number;
    cout<<number;
}
1
382 / 330 / 159
Регистрация: 06.12.2010
Сообщений: 894
05.02.2011, 20:02  [ТС] 4
Цитата Сообщение от igorrr37 Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include<iostream>
#include<algorithm>
#include<sstream>
using namespace std;
 
int main(){
    string s;
    int number;
    cin>>s;
    sort(s.begin(), s.end());
    stringstream ss(s);
    ss>>number;
    cout<<number;
}
Вот это другое дело))
0
3050 / 1455 / 492
Регистрация: 29.11.2010
Сообщений: 2,888
05.02.2011, 20:03 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
74
75
76
77
78
79
#include <cstdio>
#include <cstdlib>
#include <ctime>
#include <cmath>
#include <vector>
 
using std::vector;
 
long int exchange(long int n)
{
    vector<int> m;
    while (n>0)
    {
        int tmp = n % 10;
        m.push_back(tmp);
        n/= 10;
    }
 
    for (int i=0; i < m.size();i++)
    {
        for (int j=0; j < m.size()-1;j++)
        {
            if (m[j] < m[j+1])
            {
                int tmp=m[j]; m[j]=m[j+1]; m[j+1]=tmp;
            }
        }
    }
 
    long int newNumber = 0;
    for (int i=m.size()-1; i >= 0; i--)
    {
        newNumber = newNumber*10 + m[i];
    }
    return newNumber;
}
 
 
long int Exchange(long int number) {
  char counter[10] = {0};
 
  long int result = 0;
  long int temp_number = number;
  int length = 0;
  do {
    ++counter[temp_number % 10];
    temp_number /= 10;
    ++length;
  } while (temp_number != 0);
 
  for (int i = 0; i < 10; ++i)
    for (int j = 0; j < counter[i]; j++)
      result += i * pow(10, --length);
 
  return result;
}
 
int main(int argc, char **argv) {
  srand(time(NULL));
  long int the_number = rand() % 10000 + 10000;
 
  int test_count = 200000;
 
  clock_t start = clock();
  for (int i = 0; i < test_count; ++i)
    Exchange(the_number);
  clock_t end   = clock();
  printf("%ld, %ld in %f sec\n", the_number, Exchange(the_number),
        (end - start) / float(CLOCKS_PER_SEC));
 
  start = clock();
  for (int i = 0; i < test_count; ++i)
    exchange(the_number);
  end   = clock();
  printf("%ld, %ld in %f sec\n", the_number, exchange(the_number),
        (end - start) / float(CLOCKS_PER_SEC));
 
  return 0;
}
1
382 / 330 / 159
Регистрация: 06.12.2010
Сообщений: 894
05.02.2011, 20:29  [ТС] 6
У меня показывает, что в 3.)) Добавлю в шаблоны эту прогу, уж очень захотелось поиграться с этой разницой во времени.

Добавлено через 17 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
clock_t start = clock();
  for (int i = 0; i < test_count; ++i)
    Exchange(the_number);
  clock_t end   = clock();
  printf("%ld, %ld in %f sec\n", the_number, Exchange(the_number),
        (end - start) / float(CLOCKS_PER_SEC));
 
  start = clock();
  for (int i = 0; i < test_count; ++i)
    exchange(the_number);
  end   = clock();
  printf("%ld, %ld in %f sec\n", the_number, exchange(the_number),
        (end - start) / float(CLOCKS_PER_SEC));
Как здесь добавить 3-й таймер, 4, 5 и т.д.?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.02.2011, 20:29

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

Напишите программу, которая сортирует массив по убыванию
4. Напишите программу, которая сортирует массив по убыванию. Массив из 15 дробных чисел. Вывести...

Напишите программу, которая выводит на экран все цифры числа, начиная с первой
Напишите программу, которая выводит на экран все цифры числа, начиная с первой. Входные данные...

Напишите программу, которая выводит в столбик цифры введённого числа, начиная с последней
Nemovok, Ты большой молодец ты решил правильно.Я правда удалил строчку где выводит &quot;std::cout &lt;&lt;...

Напишите программу, которая выводит в столбик цифры введённого числа, начиная с последней
Напишите программу, которая выводит в столбик цифры введённого числа, начиная с последней....

Напишите программу, которая выводит в столбик цифры введённого числа, начиная с последней
Напишите программу, которая выводит в столбик цифры введённого числа, начиная с последней....

Напишите программу, которая вводит на экран в столбик все цифры числа, начиная с первой
1) напишите программу которая вводит на экран в столбик все цифры числа начиная с первой


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

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

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