Страница 1 от 1

помощ спешно

Публикувано на: 05 Юни 2010, 08:56
от fashion_girl
моля за помощ за една задача

ЗАДАЧА - функция,която проверя дали число е равно на сумата на кубовете на цифрите си

Някои идея???

Re: помощ спешно

Публикувано на: 05 Юни 2010, 09:07
от invisible
идеи :roll:
чудиш се как да вземеш цифрите на числото или как да го повдигаш на ^3
алгоритъма ли не ти е ясен или искаш кода направо

това е проста задача :lol:
http://sphotos.ak.fbcdn.net/hphotos-ak- ... 7502_n.jpg

Re: помощ спешно

Публикувано на: 05 Юни 2010, 09:10
от fashion_girl
алгоритама за жалост

Re: помощ спешно

Публикувано на: 05 Юни 2010, 10:00
от Etiainen
issoax написа:това е проста задача :lol:
http://sphotos.ak.fbcdn.net/hphotos-ak- ... 7502_n.jpg
Нееееееееееее :lol: :lol: :lol: :lol: :lol: :lol:

Re: помощ спешно

Публикувано на: 05 Юни 2010, 12:21
от FloWersOfEviL
Исо е безмилостен!
Аре помогни на мадамата, нал си от ФъМъИ-то?

Re: помощ спешно

Публикувано на: 05 Юни 2010, 14:20
от invisible
жалко че на зайците само лесни задачи им дават :cry:

Re: помощ спешно

Публикувано на: 05 Юни 2010, 14:23
от fak
issoax написа:жалко че на зайците само лесни задачи им дават :cry:
на нея, ако й беше лесно, нямаше да моли за помощ ;)

все още можеш да се уредиш с пълна програма ;)

Re: помощ спешно

Публикувано на: 05 Юни 2010, 14:31
от invisible
:lol:s пак че е кака да па просветли :*

Re: помощ спешно

Публикувано на: 05 Юни 2010, 16:03
от bggashnik

Код за потвърждение: Избери целия код

#include<iostream>
#include<ext/numeric>
#define Pow __gnu_cxx::power
using namespace std;
bool isEqual(unsigned long long n)
{
     unsigned long long s=0,crnt=n;
     while(crnt!=0)
     {
                s+=Pow(crnt%10,3);
                crnt/=10;
     }
if(n==s)return true;
return false;
}
int main()
{
    unsigned long long n;
    int i;
    for(i=1;i<=500;i++)if(isEqual(i))cout<<i<<' ';
    cout<<'\n';
    system("PAUSE");
    return 0;
}
Компилирано и работи на Dev-C++ 4.9.9.2 ;)

Re: помощ спешно

Публикувано на: 05 Юни 2010, 16:09
от morfei
Не съм наясно какъв материал сте взели, затова съм го написал по ламерски начин(не като bggashnik).Ако нещо не разбираш от неговия код или не сте го учили, използвай този. Трябва да ти го признаят, докато при по-горния има голяма вероятно да се усетят, че не си го писала ти.

Код за потвърждение: Избери целия код

void check(int a) //Не знам дали сте учили булеви функции
{
int p = a,sum=0,t;
while(p>0)
{
t = p%10;
sum+=t*t*t; //не знам дали сте взимали математическите библиотеки
p/=10;
}
if(sum == a) cout<<"Da.";
else cout<<"Ne.";
cout<<endl;
}
Не е тествано, но не мисля, че има и нужда.

Re: помощ спешно

Публикувано на: 05 Юни 2010, 16:16
от bggashnik
А ето и алгоритъмът:

Ще обясня само какво прави функцията, другото е ясно(един фор до 500 и проверка на функцията :mrgreen: )
Функцията вика числото n.Нека предположим, че n e числото 153. Инициализираме две променливи s=0 и crnt=n.Тъй като s ще ни бъде сумата на кубовете на цифрите, затова и трябва първоначално да е нула. Пускаме цикъл

Код за потвърждение: Избери целия код

while crnt!=0
и ще започнем да взимаме цифрите на crnt отзад-напред. За тази цел, всеки начинаещ програмист трябва да знае, че

Код за потвърждение: Избери целия код

crnt%10
винаги връща последната цифра на дадено число. Следователно,

Код за потвърждение: Избери целия код

crnt%10
ще ни върне числото 3, а операцията

Код за потвърждение: Избери целия код

Pow(crnt%10,3)
ще ни върне последната цифра на crnt на 3та степен. Събираме това число към s(което ни е нула) и вече последната цифра е обработена. Тъй като искаме вече да стигнем по предпоследната, идеята е предпоследната да ни стане последна, а това става като разделим целочислено на 10. Следователно, ако 153 разделим целочислено на 10, ще ни върне 15 и вече предпоследната цифра е последна :) :mrgreen: Така алгоритъмът продължава, докато crnt не стане равно на 0, а това ще стане, когато първата цифра разделим на 10(1 делено на 10 =0)В момента на излизане от цикъла s вече е сумата на кубовете на цифрите и единственото, което ни остава, е да сравним s със n. Функцията връща булева стойност true(истина), ако условието е изпълнено(т.е. n е равно на сумата на кубовете на цифрите си), и false(лъжа), ако не е изпълнено.


Не знам дали обясних добре, кажи, ако нещо те притеснява или не си разбрала, за първи път обяснявам така задача :mrgreen: :lol:

Re: помощ спешно

Публикувано на: 05 Юни 2010, 16:21
от invisible
това му се вика да подбиваш пазара :mrgreen:
алооу .. ще ви пратя г класите :lol:

Re: помощ спешно

Публикувано на: 05 Юни 2010, 16:24
от bggashnik
Аз, за разлика от тебе, съм доволен и само на снимка, да плакна окото :lol:

Re: помощ спешно

Публикувано на: 05 Юни 2010, 16:32
от invisible
тюю бетер индици :lol:

Re: помощ спешно

Публикувано на: 05 Юни 2010, 16:34
от bggashnik
Хахаха, разбирам за какво говориш, и при мене индииците много подбиват цените :lol: Ама, както виждаш, и аз не им се давам, трябва да се яде все пак :mrgreen: :mrgreen: