Liczba Amstronga

Odpowiedz Nowy wątek
2006-09-09 23:55
karol21
0

Witam mam napisać programik w c# który znajdzie wszystkie 3 cyfrowe liczby Amstronga.Czyli liczbę równą sumie sześcianów swoich cyfr. Np: 371=33+73+1^3=371
Jakieś rady?
pozdrawiam.

Pozostało 580 znaków

2006-09-10 00:31
0

pętla for + warunek :>


- Ciemna druga strona jest.
- Nie marudź Yoda, tylko jedz tego tosta.
Google NIE GRYZIE!
Pomogłem - kliknij

Pozostało 580 znaków

2006-09-10 08:10
karol21
0

Pomocne...dzięki:>
Jestem zielony z c#..to trzeba zaznaczyć. Koncepcje już mam...niewiem tylko jak w c# zapisać aby powiedzmy liczbe int 10 traktował jako 1 i 0...tak aby każdy jej czynnik podniesc do potęgi.

Pozostało 580 znaków

2006-09-10 09:24
0

Przy niedzielnym śniadanku i pysznej porannej kawce, wystukałem w jakieś 5 czy 10 minut (więc nie jest to zbyt genialny sposób ;-) ) coś takiego:

using System;

namespace Liczby_Amstronga
{
    class Szukacz
    {
        static void Main()
        {
            string liczba;
            int x, y, z;

            for (int i = 100; i < 1000; i++)
            {
                liczba = i.ToString();
                x = Int32.Parse(liczba[0].ToString());
                y = Int32.Parse(liczba[1].ToString());
                z = Int32.Parse(liczba[2].ToString());
                if ((Math.Pow(x, 3) + Math.Pow(y, 3) + Math.Pow(z, 3)) == i)
                    Console.Write(i + "\t");
            }
            Console.Write("\n\nWciśnij ENTER, aby zakończyć");
            Console.ReadLine();
        }
    }
}

Pozdrawiam,
Dawid


Dimidium facti, qui coepit habet

Pozostało 580 znaków

2006-09-10 11:46
0

Primo: Trzeba było nie dawać gotowego rozwiązania, nic się nie nauczy ni pobawi ;)

Secundo: Rozwiązanie wyżej jest dość "naturalne", ale dość niewydajne, lepiej to zrobić za pomocą / i %

Pozostało 580 znaków

2006-09-10 14:07
0

Jestem nowy na forum i nie pomyślałem, że zwyczaj nakazuje nie dawać gotowych rozwiązać, a jedynie wskazówki :) Sorry!
Ale temat mnie zaintrygował, gdyż nie słyszałem wcześniej o takich liczbach (możne dlatego, że nie interesuję się zbytnio matematyką). Cóż trzeba będzie zacząć... Ponieważ jednak, tamtem kod też mi się nie podobał, zamieszczam troszke zmodyfikowany.. Wydaje mi się, że bardziej wydajny. Mam nadzieję, że użytkownik, który o niego prosił mimo wszystko skorzysta na tym, a być może sam wymyśli jeszcze lepszy?

using System;

namespace Liczby_Amstronga
{
    class Program
    {
        static void Main()
        {
            int x, y, z;

            for (int i = 100; i < 1000; i++)
            {
                x = (i / 100);
                y = ((i - (x * 100)) / 10);
                z = (i - (x* 100) - (y * 10));

                if ((Math.Pow(x, 3) + Math.Pow(y, 3) + Math.Pow(z, 3)) == i)
                    Console.Write(i + "\t");
            }
            Console.Write("\n\nWciśnij ENTER, aby zakończyć");
            Console.ReadLine();
        }
    }
}

Pozdrawiam,
Dawid Niedzwiedz


Dimidium facti, qui coepit habet

Pozostało 580 znaków

2006-09-10 16:57
0

Czasami ktoś oczekuje gotowego rozwiązania swojego problemu, ale karol21 prosił o rady, więc..

Co do kodu wyżej to nadal myślę, że bardziej czytelne (czy szybsze nie wiem, nie chce mi się NTime odpalać) będzie użycie "% 10" do wydobycia pierwszej z prawej cyfry, a "/10" do odcięcia jej.

Pozostało 580 znaków

2006-09-10 23:14
karol21
0

Witam.
Dziekuje za pomoc. Na tej podstawie napisałem swój programik. Wersja dla 2 i 3 cyfrowych liczb.

{
int j,i,a,b,c;
int tablica[100];
for(j=10,i=0;j<100;j++)
{
b=j/10;
a=j%10;
if (j==(pow(b,2)+pow(a,2)))
{
// printf("\n %d %d %d ",j,b,a);
tablica[i]=j;
i++;
}
}
for(j=100;j<1000;j++)
{
c=j/100;
b=(j-(c*100))/10;
a=j%10;
if (j==(pow(c,3)+pow(b,3)+pow(a,3)))
{
// printf("\n %d %d %d %d ",j,c,b,a);
tablica[i]=j;
i++;
}
}
printf("\n liczby Armstronga :");
for(j=0;j<i;j++)
printf(" %d",tablica[j]);
getch();
}

Pozostało 580 znaków

2006-09-11 00:10
0

No tak.. hmmm zbyt schludne to co zrobiłeś nie jest, pozatym tak do końca to nie jest też C# :)

Z ciekawości jeszcze napisałem coś co sprawdzi mi w dowolnym zakresie ile takich liczb jest...
Zaskoczyło mnie troszke, że jest ich tylko kilka, a sprawdziłem w 3 potędze zakres nawet do 10 000 000 :D choć trochę to trwało...
Dopiero po małej lekturce ( http://mathworld.wolfram.com/NarcissisticNumber.html ) okazało się, że aby uzyskać większe trzeba do większej potęgi podnosić :) Ale cóż - to logiczne - pozatym tak bywa, że się czegoś nie wie lub zapomniało :)

static void Main(string[] args)
        {
            int zakres, potega, wynik = 0;
            string rozklad;

            Console.Write("Podaj zakres: ");
            zakres = Convert.ToInt32(Console.ReadLine());
            Console.Write("Podaj potęgę: ");
            potega = Convert.ToInt32(Console.ReadLine());

            for (int i = 0; i <= zakres; i++)
            {
                rozklad = i.ToString();

                for (int j = 0; j < rozklad.Length; j++)
                    wynik += (int)Math.Pow(int.Parse(rozklad[j].ToString()), potega);

                if (wynik == i)
                    Console.Write(wynik + "\t");
                wynik = 0;
            }
            Console.WriteLine("\n\aWciśnij ENTER, aby zakończyc");
            Console.ReadLine();
        }

Pozdrawiam,
Dawid Niedzwiedz


Dimidium facti, qui coepit habet

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0