IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным. В описании темы указываем язык!!!

> Помогите, пожалуйста, с задачами по C!, 2 задачи на языке C: числа палиндромы, последовательность Хемминга.
Diman
сообщение 30.03.2011 16:41
Сообщение #1





Группа: Пользователи
Сообщений: 5
Пол: Мужской
Реальное имя: Дмитрий Кожевников

Репутация: -  0  +


Здравствуйте.
Помогите, пожалуйста, с решением второй и четвёртой задачи на C. Можно просто словесный алгоритм решения.
Заранее, спасибо!
smile.gif

Прикрепленное изображение
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 31.03.2011 21:34
Сообщение #2


Гость






DarkWishmaster, усложняешь решение. Все проще гораздо.

Во-первых, никто не просил печатать все числа Хэмминга. Достаточно напечатать одно: то самое, которое первое после заданного пользователем числа. А для того, чтобы определить, принадлежит ли число к последовательности Хэмминга, совсем не нужно определять его простоту. Достаточно его поочередно целочисленно делить на 2, 3, 5 до тех пор пока либо в частном не получим 1 (следовательно, число других делителей кроме 2, 3, 5 не имеет), либо пока остаток будет ненулевым. К примеру, берем 10. сначала делим на 2. =5 (0 в остатке). Еще раз на 2? Нет, нельзя, в остатке будет 1. На 3? Нет, в остатке будет 2. На 5? Да, =1 (0 в остатке). Добрались до 1 в частном, число является 5-гладким (это еще одно название такой последовательности. Подробнее здесь)

Итого, программа выглядит так:
#include <iostream>

bool is_hemming(int n)
{
int divs[3] = {2, 3, 5};

for(int i = 0; n != 1 && i < 3; i++) // цикл закончится когда i = 3, или n = 1
{
while(!(n % divs[i])) // Пока остаток от деления = 0
{
n = n / divs[i];
}
}
return (n == 1); // если частное = 1, значит нашли "5-гладкое" число...
}
int main()
{

int i, n, index = 0;
std::cin >> n;
for(i = 2; ; i++)
{
if(is_hemming(i))
{
index += 1;
if (i > n) break;
}
}
std::cout << "Hamming(" << index << ") = " << i << std::endl;
return 0;
}
Вводим 1025 - программа справедливо показывает, что следующее число Хэмминга = 1080.
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 22.07.2025 13:44
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"