Показать полную графическую версию : Простая задача
rim_muvies
27-03-2008, 21:43
Помоги решить задачу :
Дано натуральное четырехзначное число. Провенрить, раван ли сумма цифр данного числа их произведению ? , если можно с иходником
Ма-а-аленький вопрос. Вам нужно решить задачу или подсказать как решить? :)
rim_muvies
28-03-2008, 07:53
Вообще лучшим варинатонм было б объяснить что писать в onclick на кнопке, на форме как я понял нудно тольок Edit, кнопка и допустим Panel
А в чём сложность-то?
На входе строка из 4х символов.
Каждый символ преобразуешь в число
Складываешь, умножаешь, сравниваешь
vadimiron
28-03-2008, 12:56
раван ли сумма цифр данного числа их произведению »
А такое вообще возможно? Ну кроме 1111
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... Но моего уровня, не хватит...
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;
Нет никаких проверок, если нужны добавьте сами.
DedAlex, Подходят комбинации цифр 1, 1, 2, 4. » Точно, а значит и наоботот:
4211
2411
1241
1214
и т.д. Правильно?!
Drongo, правильно. Всего их 12 штук.
DedAlex, Всего их 12 штук. » Это 12 комбинаций данного числа или таких чисел вообще?!
Если применить чуток теории и сделать предварительные рассчёты, то задача упрощается:
(* это скрипт для пакета 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}
то есть нужно просто проверить на совпадение с любым из этих чисел ;-)
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;
}
Drongo, и 12 комбинаций и таких четырехзначных чисел вообще.
DedAlex, Спасиб за разъяснения! :up Тогда смысл писать программу?! Ну, кроме как в педагогических целях...
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.