distance
Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору отвечу только не некоторые вопросы - как на наиболее простые, на остальные - лень, сорри функция simb вообще выглядит элементарно, если конечно осознаешь как правильно распорядиться имеющимися возможностями: Код: #include <algorithm> int simb(char c, char* mas, int n) { return (std::count(mas, mas+n, c)); } | значение бита: Код: #include <bitset> int bit(int Wi, int n) { // можно конечно сделать простыми сдвигом и маской... // ...но будем придерживаться stl way std::bitset<sizeof(Wi)> b = Wi; try // если делать по-уму, то всегда надо проверять на ошибку // к тому же сама функция test бросает исключение { return (b.test(n)); } catch(std::out_of_range& e) { // error processing... (void) e; return (0); } } | сортировка Код: #define g31 (0x49249249ul) #define g32 (0x381C0E07ul) int how_many_bits(int a) { a = (a & g31) + ((a >> 1) & g31) + ((a >> 2) & g31); a = ((a + (a >> 3)) & g32) + ((a >> 6) & g32); return (a + (a >> 9) + (a >> 18) + (a >> 27)) & 0x3f; } // предикат для std::sort bool compare(int a, int b) { return (how_many_bits(a) < how_many_bits(b)); } // использование using namespace std; int a[] = {1,2,3,4,5,6,7,8,9}; const int N = sizeof(a) / sizeof(a[0]); sort(a, a+N, compare); // вывод результата copy(a, a+N, ostream_iterator<int>(cout, " ")); | все, остальное давай сам, или может ещё кто чего напишет, так с миру по нитке... | Всего записей: 878 | Зарегистр. 28-03-2004 | Отправлено: 04:12 20-12-2004 | Исправлено: distance, 04:16 20-12-2004 |
|