Сортировка в двоичной записи числа

  • Автор темы 9a9z9a
  • Дата начала
9

9a9z9a

#1
Здравствуйте. Объясните, пожайлуста, как это отсортировать массив по возрастанию количества единиц в двоичной записи часла? Не понимаю условия. Я так пнимаю ,есть ,например число 777 и его двоичный код 1100001001. Ну и как тут сортировать? Или я чего недопонимаю? ;)
 
I

ierofant

#2
Что же тут непонятного...
Допустим числа 3 (11), 4 (100), 7 (111).

Меньше всего единиц в 4-ке, больше всего в 7-ке.
То есть получится при сортировке: 4, 3, 7.
 
9

9a9z9a

#3
Что же тут непонятного...
Допустим числа 3 (11), 4 (100), 7 (111).

Меньше всего единиц в 4-ке, больше всего в 7-ке.
То есть получится при сортировке: 4, 3, 7.
ierofant ,спасибо. Возник еще один вопрос. Как присвоить указателю на int значение функции , возвращающей int?

int f(int *x);
*pB++ = f(pA); , где pA адрес первой строки матрицы, pB ардесс второй. Во вторую будем записывать количество едениц в числе, которое передаеться в функцию (pA) :)
 
I

ierofant

#4
Ничего не понял, что вы хотите. Вот мой вариант решения:
C++:
#include <iostream>
#include <bitset>
#include <algorithm>
#include <ctime>

typedef std::bitset<7> Bits;
void my_rand (Bits &_bits) {_bits = rand () % 100;}
void bits_out (const Bits &_bits) {std::cout << _bits.to_ulong () << "\t-\t" << _bits << std::endl;}
bool comp (const Bits &_bits1, const Bits &_bits2) {return _bits1.count () < _bits2.count ();}

int main ()
{
srand (time (NULL));

int size;
std::cout << "Введите количество элементов: ", std::cin >> size;

Bits mas [size];
std::for_each (mas, mas + size, &my_rand);

std::cout << "Исходный массив: " << std::endl;
std::for_each (mas, mas + size, &bits_out);
std::cout << std::endl;

std::sort (mas, mas + size, &comp);

std::cout << "Отсортировынный массив: " << std::endl;
std::for_each (mas, mas + size, &bits_out);
std::cout << std::endl;

return 0;
}