0 / 0 / 0
Регистрация: 14.06.2011
Сообщений: 7
1

Числа армстронга

14.06.2011, 19:14. Показов 26304. Ответов 23
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Подскажите где ошибка, результат выдает не верный. Подскажите пжл где не верно.

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
#include <stdio.h>
#include <conio.h>
#include <math.h>
int dwyxznach (int l)
{
int a,b,i1;
a=b=l=0;
for (i1=10;i1<100;i1++) {
     a=i1/10;
     b=i1%10;
     l=pow(a,2)+pow(b,2);
     if (l==i1){return l; }
    }
}
int trech3nach(int z)
{
int a,y,x,h,i2;
for (i2 = 100; i2 < 1000; i2++) {
     x=i2/100;
     y=i2%100/10;
     h=i2%10;
     z=pow(x,3)+pow(y,3)+pow(h,3);
     if (z==i2){return z;}
     }
}
int cheterex3nach(int k)
{
int i3,g,s,f,w;
for (i3=1000;i3<10000;i3++) {
     g=i3/1000;
     s=i3%1000/100;
     f=i3%100/10;
     w=i3%10;
     k=pow(g,4)+pow(s,4)+pow(f,4)+pow(w,4);
     if (k==i3){return k;}
    }
}
void main()
{
int p,m,ch;
printf("Chisla armstronga:\n");
printf("%d\n",dwyxznach(p));
printf("%d\n",trech3nach(m));
printf("%d\n",cheterex3nach(ch));
getch();
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.06.2011, 19:14
Ответы с готовыми решениями:

Числа Армстронга. Алгоритм находит не все числа
Написал алгоритм поиска чисел Армстронга. Однако столкнулся со странной (на мой взгляд) проблемой:...

Числа Армстронга
помогите написать в си#

Числа Армстронга
Натуральное число из n цифр называется числом Армстронга, если сумма его цифр, возведенная в...

Числа Армстронга
смотри фото,помогите написать прогу в си ++

23
10 / 10 / 7
Регистрация: 18.05.2011
Сообщений: 20
14.06.2011, 20:10 2
Функция pow() должна получать параметры типа float и int и возвращать float.
А у тебя всё int.
1
0 / 0 / 0
Регистрация: 14.06.2011
Сообщений: 7
14.06.2011, 21:13  [ТС] 3
Цитата Сообщение от slymit Посмотреть сообщение
Функция pow() должна получать параметры типа float и int и возвращать float.
А у тебя всё int.
это не особо помогло, может я что-то делаю не так?!
0
10 / 10 / 7
Регистрация: 18.05.2011
Сообщений: 20
14.06.2011, 21:18 4
Само задание напиши. Как я понял должны выводиться числа армстронга 2-ух, 3-ёх и 4-ёхзначные, т.е. вывод должен быть такой: 153, 370, 371, 407, 1634, 8208, 9474. Я правильно понимаю???
0
0 / 0 / 0
Регистрация: 14.06.2011
Сообщений: 7
14.06.2011, 21:22  [ТС] 5
Да правильно, вот мой результат

Добавлено через 2 минуты
Не могу понять откуда вылезают вот эти числа: "162,2187,26244"
0
Эксперт С++
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
14.06.2011, 21:43 6
Цитата Сообщение от MsReatEA Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
int dwyxznach (int l)
{
int a,b,i1;
a=b=l=0;
for (i1=10;i1<100;i1++) {
     a=i1/10;
     b=i1%10;
     l=pow(a,2)+pow(b,2);
     if (l==i1){return l; }
    }
}
Эта функция возвращает число только если найдёт его (причём возвращает только одно). А если такого числа нет? Функция обязана вернуть что-нибудь. Ну вот она что-нибудь и возвращает. Сами виноваты.
Остальные аналогичны.

Не по теме:

Ну и названия у функций. Чуть мозг не поломал :)

0
0 / 0 / 0
Регистрация: 14.06.2011
Сообщений: 7
14.06.2011, 22:00  [ТС] 7
C++
1
2
3
4
5
6
7
8
9
10
11
int dwyxznach (int l)
{
int b,a,i;
for (i=10;i<100;i++) {
     a=i/10;
     b=i%10;
     l=pow(a,2)+pow(b,2);
     if (l==i){printf("%d\n",l);}
    }
    return l;
}
Я не много изменил код, аналогично везде, единственное не могу понять откуда он берет цифры:
0
Эксперт С++
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
14.06.2011, 22:04 8
Оттуда же и берёт. В майне вывод остался?
162 == 9^2 + 9^2 то есть это последнее проверенное (хоть и не подходящее) число 99
1
0 / 0 / 0
Регистрация: 14.06.2011
Сообщений: 7
14.06.2011, 22:07  [ТС] 9
да остался
C++
1
2
3
4
5
6
7
8
9
void main()
{
int p,m,ch;
printf("Chisla armstronga:\n");
printf("%d\n",dwyxznach(p));
printf("%d\n",trech3nach(m));
printf("%d\n",cheterex3nach(ch));
getch();
}
А как сделать чтобы не выводились эти лишние цифры?
0
Эксперт С++
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
14.06.2011, 22:16 10
Ой, да миллион способов. Я вот смотрю аргументы у функций за зря пропадают. Вот, сделал из первоначального вариант.
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
49
50
51
52
53
54
55
#include <stdio.h>
#include <conio.h>
#include <math.h>
int dwyxznach (int l)
{
    int a,b,i1;
    a=b=0;
    for (i1=l;i1<100;i1++) {
        a=i1/10;
        b=i1%10;
        l=round(pow(a,2)+pow(b,2));
        if (l==i1){return l; }
    }
    return 0;
}
int trech3nach(int z)
{
    int a,y,x,h,i2;
    for (i2 = z; i2 < 1000; i2++) {
        x=i2/100;
        y=i2%100/10;
        h=i2%10;
        z=round(pow(x,3)+pow(y,3)+pow(h,3));
        if (z==i2){return z;}
    }
    return 0;
}
int cheterex3nach(int k)
{
    int i3,g,s,f,w;
    for (i3=k;i3<10000;i3++) {
        g=i3/1000;
        s=i3%1000/100;
        f=i3%100/10;
        w=i3%10;
        k=round(pow(g,4)+pow(s,4)+pow(f,4)+pow(w,4));
        if (k==i3){return k;}
    }
    return 0;
}
void main()
{
    int p;
    printf("Chisla armstronga:\n");
    p = 9;
    while ( (p = dwyxznach(p+1)) )
        printf("%d\n", p);
    p = 99;
    while ( (p = trech3nach(p+1)) )
        printf("%d\n", p);
    p = 999;
    while ( (p = cheterex3nach(p+1)) )
        printf("%d\n", p);
    getch();
}
1
0 / 0 / 0
Регистрация: 14.06.2011
Сообщений: 7
14.06.2011, 22:32  [ТС] 11
Он жалуется на round
0
Эксперт С++
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
14.06.2011, 22:33 12
round можно убрать, это я для подстраховки. А можно определить самому, раз в библиотеке нет.
0
0 / 0 / 0
Регистрация: 14.06.2011
Сообщений: 7
14.06.2011, 22:35  [ТС] 13
уже убрал, спасибо большое Вам.
0
6 / 6 / 6
Регистрация: 30.04.2012
Сообщений: 216
22.05.2012, 17:30 14
Свой вариант для 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
#include <stdio.h> // Подключаем
#include <conio.h> // модули
 
int main()
{
 int x, y, z, n, a, st1, st2, st3;  // Переменные
 
  for (x=1; x<10; x++) // Три вложенных цикла для трехзначного числа
   {         
    for (y=1; y<10; y++) 
     {                         
      for (z=1; z<10; z++) 
       {
        for (n=1; n<10; n++)
         {
           a=100*x+10*y+z; // Целое число сложенное из составных цифр
           st1=1; st2=1; st3=1;
            for (n=1; n; n++)
             { st1=st1*y; st2=st2*z; st3=st3*x; } // Возводим все цифры в степень             
           if (a == st1+st2+st3) // Если сумма степенй равна числу, то...
            { printf ("\n %d", a); } // выводим это число на экран
         }          
       }
     }
   }
 getch(); // Ожидать нажатия любой клавиши
 return 0; // Вернуть 0 функции int main()  
}
Вот только не работает . Ошибка где-то, найти не могу.
0
Эксперт С++
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
22.05.2012, 18:36 15
Shman, почему циклы в строках 15 и 19 используют одну и ту же переменную? Почему в цикле в сроке 19 такое странное условие для выполнения итерации (просто n)? Почему в строке 15 переменная n должна меняться до 10? Зачем вообще этих цикла два?

Добавлено через 1 минуту
И ещё почему. Почему переменные x, y и z меняются от 1, а не от нуля? Ну, то есть x-то понятно, чтобы число трёхзначным было. А остальные?
0
6 / 6 / 6
Регистрация: 30.04.2012
Сообщений: 216
22.05.2012, 19:05 16
grizlik78,
Дело в том что я пытался переписать с Паскаля на С++ один код, но что-то напутал .
Pascal
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
uses crt;
var n,x,y,z,a,s,s1,s2,s3,n1,b:integer;
begin
 clrscr;
for b:=0 to 9 do   {Четыре вложенных цикла для 4значного числа}
     for x:=1 to 9 do
         for y:=0 to 9 do
             for z:=0 to 9 do
                 begin
                     for n:=1 to 9 do
                         begin
                             a:=1000*b+100*x+10*y+z;   {Целое число, сложенное из составных цифр}
                             s:=1;s1:=1; s2:=1; s3:=1;
                             for n1:=1 to n do   {Возводим все цифры в степень}
                                 begin
                                     s:=s*x;
                                     s1:=s1*y;
                                     s2:=s2*z;
                                     s3:=s3*b;
                                 end;
                             if a=s+s1+s2+s3 then writeln(a);   {Если сумма степеней равна числу, выводим на экран}
                         end;
                 end;
 readln;
end.
Помогите адаптировать под С++.
0
Эксперт С++
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
22.05.2012, 19:14 17
Да, в паскалевском коде указанные ошибки отсутствуют. Разве что там с единицы должно начинаться b, а не x.
Повнимательнее переводить надо.
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
#include <stdio.h> // Подключаем
#include <conio.h> // модули
 
int main()
{
 int x, y, z, n, a, st1, st2, st3;  // Переменные
 
  for (x=1; x<10; x++) // Три вложенных цикла для трехзначного числа
   {         
    for (y=0; y<10; y++) 
     {                         
      for (z=0; z<10; z++) 
       {
        for (n=1; n<10; n++)
         {
           int n1;
           a=100*x+10*y+z; // Целое число сложенное из составных цифр
           st1=1; st2=1; st3=1;
            for (n1=1; n1<=n; n1++)
             { st1=st1*y; st2=st2*z; st3=st3*x; } // Возводим все цифры в степень             
           if (a == st1+st2+st3) // Если сумма степенй равна числу, то...
            { printf ("\n %d", a); } // выводим это число на экран
         }          
       }
     }
   }
 getch(); // Ожидать нажатия любой клавиши
 return 0; // Вернуть 0 функции int main()  
}
1
0 / 0 / 0
Регистрация: 07.03.2013
Сообщений: 3
07.03.2013, 14:24 18
Подскажите пожалуйста, битый час сижу и не пойму почему не работает.
Выводит не числа армстронга, а все числа в заданном диапазоне.

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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#include "math.h"
# include <iostream>
using namespace std;
 
bool amstrong(int chislo){
    int a1,a2,a3,a4,d;
    int sum=0;
    int y=0;
    bool res;
 
    //Проверяем кол-во цифр в числе
    while(chislo!=0){
        chislo/=10;
        y++; }
    //После того как мы определили кол-во цифр, определяем является ли пришедшее число числом Амстронга
 
    if (y==1) {
        res=true;
    }
 
 
    if (y==2){
        res=false;
    }
 
 
    if (y==3) {
            a1=chislo/100;
            a2=(chislo%100)/10;
            a3=(chislo%100)%10;
            
            if (a1*a1*a1+a2*a2*a2+a3*a3*a3==chislo){
            res=true;}
    }
 
    if (y==4) {
            a1=chislo/1000;
            a2=(chislo%1000)/100;
            a3=((chislo%1000)%100)/10;
            a4=((chislo%1000)%100)%10;
 
            if (a1*a1*a1*a1+a2*a2*a2*a2+a3*a3*a3*a3+a4*a4*a4*a4==chislo) {
            res=true;
            }
        }
    return res;
}
 
 
 
int main () 
{
    int min,max;
 
 cout<<"\n Vvedite minimal'moe znachenie \n";
 cin>>min;
 
 cout<<"\n Vvedite maximal'noe znachenie \n";
 cin>>max;
 
 for (min; min<=max; min++){
     if (amstrong(min)) {
         cout<<min;
     }
 }
}
0
Эксперт С++
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
07.03.2013, 14:40 19
После выполнения цикла в строках 12 и 13 содержимое переменной chislo равно нулю, поэтому дальнейшее использование этой переменной для получения цифр разрядов невозможно. Нужна копия этой переменной.
0
0 / 0 / 0
Регистрация: 07.03.2013
Сообщений: 3
09.03.2013, 14:10 20
Подскажите...как написать копию переменной?
0
09.03.2013, 14:10
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.03.2013, 14:10
Помогаю со студенческими работами здесь

Числа Армстронга
Не понимаю почему не работает, помогите пожалуйста. Натуральное число из n цифр является числом...

Числа* Армстронга
Помогите, пожалуйста Натуральное число называется числом Армстронга, если сумма цифр числа,...

числа Армстронга
Помогите пожалуйста с написанием кода Среди чисел от 1 до 1000 найти все числа Армстронга. Число...

Числа Армстронга
Вообщем я задался идеей сделать программу, которая проверяет является ли заданное число, числом...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru