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

Автоморфные числа - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.79
azot
0 / 0 / 0
Регистрация: 13.10.2009
Сообщений: 24
22.12.2009, 18:02     Автоморфные числа #1
Привет всем,помогите решить такую задачку на С++

Дан массив из N целых чисел,где N<=16,создать программу с использованием функций.

1. Удалить из массива автоморфные числа, т.е. числа, которые совпадают с младшими разрядами своих квадратов 5 (5^2=25); 6 (6^2 =36); 25 (25^2=625)?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.12.2009, 18:02     Автоморфные числа
Посмотрите здесь:

Автоморфные числа C++
Дан файл F, компонентами которого являются целые числа. Получить в файле G все нечетные числа, входящие в файл F. Числа в файле G должны следовать C++
C++ Как написать программу-калькулятор чтобы было можно додавать 2 числа, 3 числа, 4 числа, n чисел?
C++ Автоморфные числа
C++ Поменять одну из цифр первого числа с цифрой второго числа, чтобы получившиеся числа были взаимно простыми
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Aye Aye
 Аватар для Aye Aye
367 / 281 / 36
Регистрация: 17.12.2009
Сообщений: 567
22.12.2009, 18:16     Автоморфные числа #2
проходим по массиву, выбираем послдовтельно по элементу, проверяем удовлетворяет ли он условию, если да пишем ноль на его месте.
как определить какое сичло:

(число*число) поделить на 10 и взять остаток - это будет самый младший разряд числа, и этот остаток сравнисть с самим числом. если совпадаюто то число автоморфно.
C++
1
2
3
int m[n];
//заполнение массива m;
for (int i=0;i<n) if ( (m[i]*m[i])%10==m[i] ) m[i]=0;
а функции сам придумаешь
например
bool isautomorph(int x)
и определишь её как я написал код выше. и используешь ее в цикле проходя для определения автоморфности.
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
22.12.2009, 18:25     Автоморфные числа #3
Видимо не совсем помогло то что показал.
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <iostream.h>
#include <windows.h>
#include <math.h>
bool avtomorf(int i)
{
    int temp=i, temp1=0;
    while(temp>9)
       {
           temp/=10;
           temp1++;
       }
    if(pow(i%((int)pow(10, temp1)), 2)==i)
       return true;
    else
        return false;
}
int main ()
{
    int *mas, n, i, j;
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    cout<<"Ââåäèòå êîëè÷åñòâî Г°Г*çìåð Г¬Г*Г±Г±ГЁГўГ*: "<< endl;
    cin>>n;
    mas=new int[n];
    cout<<"Ââåäèòå ýëåìåГ*ГІГ» Г¬Г*Г±Г±ГЁГўГ*: "<< endl;
    for(i=0; i<n; i++)
    {
          cout<<"["<<i<<"]= ";
          cin>>mas[i];
    }
    cout<<"èñõîäГ*ûé Г¬Г*Г±Г±ГЁГў"<<endl;
    for(i=0; i<n; i++)
        cout<<mas[i]<<" ";
    cout<<endl;
    for(i=0; i<n; i++)
        if(avtomorf(mas[i]))
        {
            for(j=i; j<n-1; j++)
                mas[j]=mas[j+1];
            n--;
            i--;
        }
    cout<<"ïîëó÷åГ*Г*ûé Г¬Г*Г±Г±ГЁГў"<<endl;
    for(i=0; i<n; i++)
        cout<<mas[i]<<" ";
    cout<<endl;
    return 0; 
}
azot
0 / 0 / 0
Регистрация: 13.10.2009
Сообщений: 24
22.12.2009, 19:34  [ТС]     Автоморфные числа #4
У меня не компилирует в borland c,а в вижиал всё путём,помоему дело в bool,который borland не компилирует,как его заменить?и напишите пож-ста коментарий к функции?
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
22.12.2009, 19:51     Автоморфные числа #5
Вариант без bool:
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <iostream.h>
#include <windows.h>
#include <math.h>
int avtomorf(int i)// в функцию передается параметром число i
{
        int temp=i,     temp1=0;
    while(temp>9)// пока temp больше 9
       {
           temp/=10;// делим temp на 10
           temp1++;// temp1 увеличиваем на 1
       }
    if(pow(i%((int)pow(10, temp1)), 2)==i)// здесь так: (int)pow(10, temp1) - это десять в какой-то степени, степень зависит от temp1, которая в свою очередь зависит от разрядности числа i переданного параметром в функцию. Например i=623, тогда (int)pow(10, temp1) будет равно 100. Или например i=1230, тогда (int)pow(10, temp1) будет равно 1000. Соответственно i%((int)pow(10, temp1) будет равно целому остатку деления i на ((int)pow(10, temp1). Для приведенных до этого примеров, этот остаток будет равен в первом случае 23, во втором случае 230. Ну а pow(i%((int)pow(10, temp1)), 2) - это квадрат этих остатков, который сравнивается с i
       return 1;// фунция возвращает 1 если остаток в квадрате равен i (для автоморфных чисел)
        else
                return 0;// если не равен возвращает 0
}
int main ()
{
        int *mas, n, i, j;
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    cout<<"Введите количество размер массива: "<< endl;
    cin>>n;
    mas=new int[n];
    cout<<"Введите элементы массива: "<< endl;
    for(i=0; i<n; i++)
        {
          cout<<"["<<i<<"]= ";
          cin>>mas[i];
    }
    cout<<"исходный массив"<<endl;
    for(i=0; i<n; i++)
        cout<<mas[i]<<" ";
    cout<<endl;
        for(i=0; i<n; i++)
                if(avtomorf(mas[i]))// если число mas[i] автоморфно
                {
                        for(j=i; j<n-1; j++)// в дальнейших строчках идет смещение всех чисел после mas[i] на одно положение влево
                                mas[j]=mas[j+1];
                        n--;// уменьшается размер массива на 1
                        i--;// уменьшаем текущий индекс на 1, т.к. снова будем проверять элемент mas[i] (ведь на его месте после смещения всех элементов уже другое число)
                }
        cout<<"полученный массив"<<endl;
    for(i=0; i<n; i++)
        cout<<mas[i]<<" ";
    cout<<endl;
    return 0; 
}
Yandex
Объявления
22.12.2009, 19:51     Автоморфные числа
Ответ Создать тему
Опции темы

Текущее время: 21:12. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru