Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
0 / 0 / 0
Регистрация: 23.11.2015
Сообщений: 11

Циклические преобразования чисел

23.11.2015, 02:47. Показов 1963. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Друзья! Очень надеюсь на вашу помощь. Дали задание:
Натуральное число преобразовывается по следующему правилу: каждая его цифра возводится в квадрат, затем эти квадраты складываются. Полученное число преобразовывается таким же образом. Указанный процесс может продолжаться бесконечно, может остановиться на каком-то числе (у которого сумма квадратов его цифр равна самому числу), либо может образоваться цикл из нескольких повторяющихся элементов. Исследовать поведение всех трехзначных чисел, преобразующихся по этому правилу, и выявить закономерности.
По этому заданию нужно написать программу. Сам не справляюсь, поэтому прошу помочь. Заранее спасибо!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.11.2015, 02:47
Ответы с готовыми решениями:

Циклические преобразования целых чисел
НУЖНА ПОМОЩЬ. Вот задача Натуральное число преобразовывается по правилу: каждая его цифра возводится в квадрат, затем эти квадраты...

Сложные циклические вычисления: среди целых чисел от 1 до 30 найдите пары чисел, первое из которых равно 2
Среди целых чисел от 1 до 30 найдите пары чисел, первое из которых равно 2/3 от второго, а второе 3/2 от первого.

Циклические алгоритмы. нахождение натуральных чисел
Даны натуральные числа m,n. Получить все <n натуральные числа, квадрат суммы цифр которых равен m.

12
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,984
Записей в блоге: 32
23.11.2015, 03:31
C++
1
2
3
4
5
6
7
8
9
10
11
12
int  t(int n) {return n ? (n%10)*(n%10) + t(n/10) : 0;}
 
bool c(int n, int *b, int *e) {return b>e ? 0 : *b==n || c(n,b+1,e);}
 
void s(int *b, int *e) {if (b<=e) {cout<<*b<<'\t'; s(b+1,e);} else cout<<'\n';}
 
void f(int n, int i, int *b, int *p, int *e) {
    *p=n; if (!c(n,b,p-1) && i<100) f(t(n),i+1, b, p+1, e); else s(b,p);}
 
void task(int n, int *b, int *e) {if (n<1000) {f(n, 0, b, b, e); task(n+1, b, e);}}
 
int main() {int m[100]; task(100, m, m-1+sizeof(m)/sizeof(m[1]));}
1
0 / 0 / 0
Регистрация: 23.11.2015
Сообщений: 11
23.11.2015, 12:15  [ТС]
Спасибо за помощь! Не могли бы вы пояснить за что отвечает каждая функция? Заранее благодарен.
0
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,984
Записей в блоге: 32
23.11.2015, 13:50
А давайте вместе разбираться Каковы ваши мысли?
1
0 / 0 / 0
Регистрация: 23.11.2015
Сообщений: 11
23.11.2015, 15:21  [ТС]
Как я понял, в функции t мы каждую цифру возводим в квадрат и складываем. Дальше пока не могу разобраться в написании.
0
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,984
Записей в блоге: 32
23.11.2015, 15:34
Правильно, t - это один шаг трансформации числа, заданной в условии, от слова transform. Давайте дальше
0
0 / 0 / 0
Регистрация: 23.11.2015
Сообщений: 11
23.11.2015, 15:41  [ТС]
Дальше уже не могу понять, мы пишем более простым языком, поэтому самому мне уже не разобраться
0
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,984
Записей в блоге: 32
23.11.2015, 15:49
В любом случае у вас уже есть выбор - или самому написать кот этой тривиальной задачки, или разобраться в моем, или продолжать мучить других дальше
0
Модератор
Эксперт С++
 Аватар для zss
13769 / 10962 / 6491
Регистрация: 18.12.2011
Сообщений: 29,237
28.11.2015, 14:51
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
#include <iostream>
using namespace std; 
// функция возвращает сумму квадратов всех цифр числа n
int convert(int n)
{
    int sum=0;
    while(n)
    {
        sum+=(n%10)*(n%10);
        n/=10;
    }
    return sum;
}
int main() 
{
    for(int i=100;i<=999;i++) // перебор всех трехзначных чисел
    {
        int n=i;
        cout<<"Initial nomber="<<n<<endl;
        for(int i=1;i<=100;i++) // повторим 100 раз вычисление суммы квадратов
        {
            n=convert(n);
            cout<<n<<' ';
            if(i%20==0) // вывод по 20 шт в строке
                cout<<endl;
        }
        cin.get(); // после вывода 100 итераций для каждого исходного числа ждем нажатия Enter
    }
    return 0;
}
1
0 / 0 / 0
Регистрация: 23.11.2015
Сообщений: 11
28.11.2015, 14:57  [ТС]
Спасибо большое!
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
28.11.2015, 15:10
C++
1
2
3
4
5
6
7
8
9
10
11
12
for(int i=100;i<=999;i++)    {
    char mask[1000];
    memset(mask, 0, 1000);
    int n=i;
    while(1) {
        cout<<n<<endl;
        if (mask[n]) {
          cout << "цикл" << endl;
        n=convert(n);
        mask[n] = 1; 
    }
}
Добавлено через 1 минуту
Этим кодом надо заменить строки 16-28 в коде уважаемого zss,

Добавлено через 3 минуты
Этот алгоритм, наверное, можно улучшить. Так как исследование каждого числа дает некоторую информацию, которую можно использовать в дальнейшем. Но в моем коде для каждого числа все начинается сначала (memset(mask, 1, 1000))
2
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,984
Записей в блоге: 32
28.11.2015, 15:23
Байт, да, идея с маской хороша. Я в прошлой инкарнации этой же темы этого же ТС (недельной давности) - Циклические преобразования чисел - тоже как раз до 100 ограничивал: у нас с zss мысли сходятся
0
0 / 0 / 0
Регистрация: 23.11.2015
Сообщений: 11
03.12.2015, 17:03  [ТС]
Программа написана правильно, но нужно добавить исследование чисел. Заранее благодарен!

 Комментарий модератора 

DMiX2, Вы создали три одинаковых темы. Это грубое нарушение правил форума:
П. 5.5. Запрещено размещать тему в нескольких подразделах одного раздела одновременно (кросспостинг), а также дублировать тему в одном разделе.
Все темы-клоны удалены. Сообщения из них перенесены в эту тему. Убедительная просьба, не игнорировать это сообщение и ознакомится с правилами. Это не займёт у Вас много времени (я думаю, не более 5 минут). Если нам всё-таки не удастся прийти к взаимопониманию, я буду вынужден применить к Вам более жёсткие меры воздействия. Надеюсь, до этого не дойдёт.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.12.2015, 17:03
Помогаю со студенческими работами здесь

Циклические алгоритмы: найти сумму первых k чисел Пелля
Числа Пелля определяются так: первое число равно 1, второе равно 2, каждое следующее равно a(n)=2a(n-1)+a(n-2). Составить программу,...

Сложение длинных положительных целых чисел, используя циклические списки
как реализовать программу сложения длинных целых чисел используя циклические списки?

Циклические алгоритмы, найти сумму всех чисел непустой последовательности
Помогите, пожалуйста, решить задачу, если можно на чистом С++ Дана непустая последовательность целых чисел, оканчивающаяся нулем....

Важно. Составить программу-генератор простых чисел. Циклические алгоритмы
Составить программу-генератор простых чисел, в основу положить формулу (см. вложение)

Циклические операторы: найти сумму всех четных чисел, меньших заданного числа N
Написать программу, находящую сумму всех четных чисел, меньших заданного числа N. Сначала задается общее количество чисел и число N ...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru