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

Генерация чисел Хэмминга - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ что такое матрица? http://www.cyberforum.ru/cpp-beginners/thread50225.html
Уважаемые,объясните мне,что такое матрица?:)....я толком не понимаю,читаю посты про матрицу,и как то стесняюсь,что не знаю такого...Объясните буду благодарен
C++ Помогите с алгоритмом Даны координаты вершин двух трапеций. нужно проверить вложена ли одна трапеция в другую . Подскажите какую-нибудь идею, а то у меня выходит как-то слишком громоздко, некрасиво и вероятнее всего неправильно... http://www.cyberforum.ru/cpp-beginners/thread50210.html
C++ Массив указателей
Вот,продолжаю изучать тему массивы указателей. В качестве примера, почти уже на последних страницах приводится задачка с использованием указателей в 2-мерных массивах. Набрал программу, вижу что программа не выводит русские слова по запросу,решил её изменить. Вот как получилось, программу,только начинаю разбирать,что к чему, пока не до конца въезжаю в неё. Программа вроде компилируется но...
Найти сумму элементов столбца матрицы, в котором расположится наибольший элемент C++
Помогите пож-та решить задачку: Найти сумму элементов того столбца двумерного массива, в котором расположится наибольший элемент (считаем, что он единственный) :)
C++ Определить стоимость телефонного разговора http://www.cyberforum.ru/cpp-beginners/thread50148.html
Вообщем задача такая: юзер вводит тариф по которому он разговаривает и количество минут которое он наговорил... задача просчитать это всё. я думаю так.. у кого есть какие мысли? #include <iostream> using namespace std; void main() { setlocale(LC_ALL, "Russian"); float m=0, s=0, S=0, M=0, res=0; cout << "Введите тариф разговоров(грн/мин.) -> " << endl;
C++ Помогите разобраться с zip архивами. Есть zip-архив, из него надо вытащить определенный файл, обработать его и запихнуть обратно, сохранив все остальные файлы. Если кому не трудно подскажите, как проще работать с архивами. Нашел библиотеку ZLIB, но так и не смог разобраться с ней. Основная проблема как ей воспользоваться. У меня VC++ 2008 и куча файлов относящихся к ZLIB а как их подружить вместе пока не разобрался. Если у кого... подробнее

Показать сообщение отдельно
Sweet Dream
1 / 1 / 0
Регистрация: 09.09.2009
Сообщений: 18

Генерация чисел Хэмминга - C++

09.09.2009, 22:00. Просмотров 8389. Ответов 19
Метки (Все метки)

Задание 2.24. Генерация чисел Хэмминга
Числами Хэмминга называются натуральные числа, которые среди своих делителей имеют только степени чисел 2, 3 и 5. Первые 10 упорядоченных по возрастанию чисел Хэмминга образует последовательность 1, 2, 3, 4, 5, 6, 8, 9, 10 и 12. Первому числу этого ряда соответствуют нулевые степени всех сомножителей. Составить программу, которая генерирует первые 1000 чисел Хэмминга.
Совет 1 (общий)
Конечно, можно построить цикл по перебору всех длинных целых чисел (а их — порядка двух миллиардов), в теле которого выделяются все делители, кратные 2, 3 и 5. Если результат деления тестируемого числа оказывается равным 1, т. е. у числа никаких других делителей нет, то найдено очередное число Хэмминга. Однако такая программа будет очень долго работать (для сравнения мы приведем и текой вариант решения).
Гораздо более эффективный алгоритм базируется на определении следующего числа Хэмминга по уже построенной последовательности. При этом приходится запоминать, какое из ранее найденных чисел необходимо домножить на 2, какое — на 3 и какое — на 5. Из трех возможных вариантов следует выбирать минимальное произведение. На первом шаге мы знаем единственное число Хэмминга, равное 1, и именно оно может быть умножено на следующем шаге на один из трех возмож-
ных множителей. Минимальное произведение равно 2, и это — второе число Хэмминга. Теперь умножению на 2 должно быть подвергнуто второе число, а умножению на 3 и 5 — пока еще первое. Поэтому на втором шаге минимальное произведение равно 3. После этого умножению на 2 и 3 может быть подвергнуто второе число, а на 5 — пока еще только первое. Одним словом, когда определено минимальное произведение, использованный множитель должен "переместиться" на следующее, уже найденное число Хэмминга.
Совет 2 (общий)
Обозначим через kl, k2, k3 индексы чисел Хэмминга, которые будут множиться соответственно на 2, 3 и 5. Их начальные значения в программе на Бейсике можно не задавать, т. к. все числовые переменные перед началом работы программы сбрасываются в ноль.
Программа 2_24.с (оптимальный вариант)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
#include <conio.h>
main() (
long Xam[1000], н2, хЗ, к5;
int j;
int k2=0,k3=0,k5=0;
clrscr(); -
Xam[0]-l,-
printf("%4d %9d",l,l);
for(i=i; j<1000; j++) {
x2=Xam[k2]*2; x3=Xam[k3]*3; 
x5=Xam[k5]*5;
if(x2<=x3 && x2<=x5)
{Xam[j]=x2; k2++;}
if(x3<=x2 && x3<=x5)
{Xam[j]=x3; k3++;} 
if(x5<=x2 && x5<=x3)
{Xam[j]=x5; k5++;}
printf("\n%4d %91d",j,Xam[j]);
if(j % 20==0)
getch(); }
getch (); }

Дано такое задание, исправление ошибок в программе результата не дает((( В нете информацию про генерацию чисел хемминга найти не удалось Помогите пожалуйста, как сделать это задание?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru