PDA

Показать полную графическую версию : Простая задача


rim_muvies
27-03-2008, 21:43
Помоги решить задачу :
Дано натуральное четырехзначное число. Провенрить, раван ли сумма цифр данного числа их произведению ? , если можно с иходником

detrin
27-03-2008, 22:23
Ма-а-аленький вопрос. Вам нужно решить задачу или подсказать как решить? :)

rim_muvies
28-03-2008, 07:53
Вообще лучшим варинатонм было б объяснить что писать в onclick на кнопке, на форме как я понял нудно тольок Edit, кнопка и допустим Panel

Busla
28-03-2008, 12:50
А в чём сложность-то?
На входе строка из 4х символов.
Каждый символ преобразуешь в число
Складываешь, умножаешь, сравниваешь

vadimiron
28-03-2008, 12:56
раван ли сумма цифр данного числа их произведению »
А такое вообще возможно? Ну кроме 1111

Drongo
28-03-2008, 14:22
vadimiron, Конечно, не четырёхзначное, но число 123 отвечает этому стандарту, например:

1 + 2 + 3 = 6
и
1 * 2 * 3 = 6Вообще это я так понял задачка на совершенное число. Совершенное число это такое число когда все его сомножители (но не само число) в сумме дают это же число. Подобные задачи встречались на С++. Если это оно, то вот ссылка на объяснение совершенных чисел...
Совершенное число (http://ru.wikipedia.org/wiki/%D0%A1%D0%BE%D0%B2%D0%B5%D1%80%D1%88%D0%B5%D0%BD%D0%BD%D0%BE%D0%B5_%D1%87%D0%B8%D1%81%D0%BB%D0%BE) (Или я чуток запутался в объяснении?! :dont-know чую, что, что-то не то, а что именно, понять не могу) Может задачка чисто для теории, возможно\невозможно, а не для того, чтобы находить такие числа?! Хотя если задали такую задачу, значит существуют, это моё мнение, хотя я могу ошибаться. Блин, точно запутался, если что, поправьте меня в теории чисел?!
(Сам я не решал ещё эту задачку, мой язык С++), не могу придумать алгоритм. :dont-know Число 28 тоже совершенное число, но каким боком, я так понять и не могу, в книге одно написано, в Википедии, другое, теряюсь... Зная алгоритм, можно без напряга написать на С++, а потом пусть человеку переведут на его родной Delphi... Но моего уровня, не хватит...

DedAlex
28-03-2008, 14:31
vadimiron, 1111 не подходит. Подходят комбинации цифр 1, 1, 2, 4.
rim_muvies, procedure TForm1.Button1Click(Sender: TObject);
var
a, b, c, d : byte;
begin
a := StrToInt ( Edit1.Text [ 1 ] );
b := StrToInt ( Edit1.Text [ 2 ] );
c := StrToInt ( Edit1.Text [ 3 ] );
d := StrToInt ( Edit1.Text [ 4 ] );
if a + b + c + d = a * b * c * d then
Panel1.Caption := 'Равны'
else
Panel1.Caption := 'Не равны';
end;
Нет никаких проверок, если нужны добавьте сами.

Drongo
28-03-2008, 15:04
DedAlex, Подходят комбинации цифр 1, 1, 2, 4. » Точно, а значит и наоботот:
4211
2411
1241
1214
и т.д. Правильно?!

DedAlex
28-03-2008, 15:11
Drongo, правильно. Всего их 12 штук.

Drongo
28-03-2008, 15:14
DedAlex, Всего их 12 штук. » Это 12 комбинаций данного числа или таких чисел вообще?!

pva
28-03-2008, 15:32
Если применить чуток теории и сделать предварительные рассчёты, то задача упрощается:

(* это скрипт для пакета Wolfram Research Mathematica 4.0 *)
In[1]: tab1 = Prime[Range[2000]];
(* перебираем все 4-значные простые числа, для которых сумма разрядов равна произведению *)
Part[tab1,
In[2]: Flatten@Position[tab1,
x_ /; Block[{dig1 = RealDigits[x]},
dig1[[2]] == 4 && (Plus @@ dig1[[1]] == Times @@ dig1[[1]])]]]
(* получаем *)
Out[1]: {2141, 2411, 4211}

то есть нужно просто проверить на совпадение с любым из этих чисел ;-)

mrcnn
29-03-2008, 08:06
i - заданное число
x - сумма
y - произведение
Алгоритм для _любой_ значности положительного числа, ограничение только в типе:


int x=0;
int y=1;

while (i != 0){
x=x+i%10;
y=y*(i%10);
i=(i-(i%10))/10;
}

DedAlex
29-03-2008, 12:45
Drongo, и 12 комбинаций и таких четырехзначных чисел вообще.

Drongo
31-03-2008, 13:44
DedAlex, Спасиб за разъяснения! :up Тогда смысл писать программу?! Ну, кроме как в педагогических целях...




© OSzone.net 2001-2012