Bazar, 11.12.2016, 10:57
İnformatikanın məktəbdə tədrisi
Baş səhifə Qeydiyyat Giriş
e-mail: informatik-az@mail.ru · RSS
Menyu
Fotoşəkillər
Giriş forması
Sorğu
Müəllim kimi informatika dərslərində tez-tez istifadə edirəm:
Cavabların sayı: 6165
Faydalı keçidlər

  • ict.edu.az
  • ict.az
  • telekommunikasiya.edu.az
  • İnf-math.narod.ru
  • Millibyte.az
  • kayzen.az/blog/informatika
  • alqoritm.ucoz.org
  • mincom.gov.az
  • Facebook-da
    Təqvim
    «  Dekabr 2016  »
    B.e.Ç.a.ÇC.a.CŞB
       1234
    567891011
    12131415161718
    19202122232425
    262728293031
    Təqdimatlar
    Saat
    Statistika

    Onlayn: 2
    Ziyarətçilərin sayı: 2
    Qeydiyyatdan keçənlərin sayı: 0


     2-21r
    Найти все k-значные числа Армстронга (2<k<10). 

    К-значное число является числом Армстронга, если сумма к-ых степеней его цифр равна самому числу. 
    Например, 153=1^3 + 5^3 + 3^3, 8208=8^4 + 2^4 +8^4 являются числами Армстронга. Если k=3, то диапазон проверки чисел 100 – 999, если k=4, то  1000 – 9999.
     В программе A2_21a в строке 7 нижняя граница чисел n1=10^(k-1). В цикле (строки 9 – 21) перебираются все к-значные числа и для каждого числа находится суммак-ых степеней его цифр – строка 15. Если эта сумма равна исходному числу (строка 20) число выводится на экран. Если в процессе вычисления суммы, она становится больше проверяемого числа, то дальше это число не проверяется (строка 17). Этим мы чуть-чуть уменьшаем общее время вычисления. Однако при к=8 и, особенно, при к=9, время вычисления достаточно большое (до десятка минут). Чтобы уменьшить время вычисления, к-ые степени цифр от 0 до 9 можно подсчитать заранее и сохранить их. 
    В программе A2_21b степени всех цифр подсчитывается заранее и сохраняются в массиве с (строки 7 -13). В строке 21 эти значения используются при вычислении суммы к-ых степеней цифр числа. Время вычисления при к=9 уменьшится (примерно в 4-5 раз), однако останется все таки большим (несколько минут). Дальнейшее уменьшение времени возможно специальным методом подсчета суммы.

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    Program A2_21a;

    Var

      k,n1,n,i,j,s,q,p:integer;

    BEGIN

     readln(k);

     n1:=10;

     for i:=1 to k-2 do n1:=n1*10;

     

     for i:=n1 to n1*10 -1 do

      begin

       n:=i; s:=0;

       while (n<>0) do

        begin

         q:=n mod 10; p:=q;

         for j:=1 to k-1 do p:=p*q;

         s:=s+p;

         if (s>i) then break;

         n:=n div 10;

        end;

       if (s=i) then  writeln(i);

      end;

     readln;

    END.

    //Program A2.21a;

    #include <iostream>

     

    using namespace std;

     

    int main()

    {   int k,n1,n,i,j,s,q,p;

         cin>>k;

         n1=10;

         for(i=1;i<k-1;i++) n1*=10;

         for(i=n1;i<n1*10;i++)

         {

             n=i; s=0;

             while (n)

             {

               q=p=n%10;

               for(j=1;j<k;j++) p*=q;

               s+=p;

               if(s>i) break;

               n/=10;

             }

             if(s==i)cout<<i<<endl;

         }

        return 0;

    }

    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

    Program A2_21b;

    Var

      k,n1,n,i,j,s,q,p:integer;

      c:array[0..9] of integer;

    BEGIN

     readln(k);

     c[0]:=0; c[1]:=1;

      for i:=2 to 9 do

      begin

       p:=i;

       for j:=1 to k-1 do p:=p*i;

       c[i]:=p;

      end;

    n1:=10;

     for i:=1 to k-2 do n1:=n1*10;

     for i:=n1 to n1*10 - 1 do

      begin

       n:=i; s:=0;

       while (n<>0) do

        begin

         s:=s+c[n mod 10];

         if (s>i) then break;

         n:=n div 10;

        end;

       if (s=i) then  writeln(i);

      end;

     readln;

    END.

    //Program A2.21b;

    #include <iostream>

     

    using namespace std;

     

    int main()

    {   int k,n1,n,i,j,s,q,p;

         int c[10]={0,1};

         cin>>k;

         n1=10;

         for(i=1;i<k-1;i++) n1*=10;

         for(i=2;i<10;i++)

         {       p=i;

             for(j=1;j<k;j++) p*=i;

             c[i]=p;

         }

         for(i=n1;i<n1*10;i++)

         {

             n=i; s=0;

             while (n)

             {

               s+=c[n%10];

               if(s>i) break;

               n/=10;

             }

             if(s==i)cout<<i<<endl;

         }

        return 0;

    }

    Copyright İsaNaida © 2016
    PYTHON 3.4
    ALPLogo
    Elan
    Fəxr edirik


    Bölmələr
    MÜSABİQƏ
    Azərbaycanda İKT
    Axtarış
    Video
    Info-Ko