Консультация № 145225
27.09.2008, 20:32
0.00 руб.
27.09.2008, 20:57
0 5 2
здравствуйте,уважаемые эксперты...
помогите ,пожалуйста,решить вот эти задачи...
1)Составить программу,которая находит наибольшее значение отношения трехзначного числа к сумме его цифр.
2)Написать программу,которая вычисляет наибольший общий делитель двух целых чисел

помогите,пожалуйста...
заранее вам спасибо...

Обсуждение

Неизвестный
27.09.2008, 20:49
общий
Вам это на каком языке программирования нужно сделать?
Неизвестный
27.09.2008, 20:54
общий
хороший вопрос...нам это задали на олимпиадную...так что определить и решить надо на свой вкус...ну сейчас мы решаем задачи с помощью циклического алгоритма.на уроках программы пишем в программе BPW.
а так стандартная программа: Begin...
Var...
read(...)
for...
вот вроде так.....
Неизвестный
27.09.2008, 20:58
общий
Перенес вопрос в рассылку Pascal - здесь быстрее должны ответить.
Тем более в качестве примера Вы привели программу, написанную именно на Паскале.
Неизвестный
27.09.2008, 21:40
общий
это ответ
Здравствуйте, Заболотских Татьяна Сергеевна!
Предлагаю вариант решения задач в Delphi
Код в приложении
Переменные:
i - счетчик
a, b - вводимые числа для второй задачи
del - максимаольный делитель для второй задачи
min - минимальное число из введенных
temp - временная переменная
max_del - наибольшее отношение для первой задачи


Приложение:
program Project1;

{$APPTYPE CONSOLE}

uses
SysUtils, StrUtils;
var
i, a, b, del, min: integer;
temp, max_del: real;
begin
{1}
max_del:= 0;
for i:= 1 to 999 do
begin
case Length(IntToStr(i)) of
1:
begin
temp:= 1;
if temp > max_del then max_del:= temp;
end;
2:
begin
temp:= i / (StrToInt(MidStr(IntToStr(i),1,1)) + StrToInt(MidStr(IntToStr(i),2,1)));
if temp > max_del then max_del:= temp;
end;
3:
begin
temp:= i / (StrToInt(MidStr(IntToStr(i),1,1)) + StrToInt(MidStr(IntToStr(i),2,1)) + StrToInt(MidStr(IntToStr(i),3,1)));
if temp > max_del then max_del:= temp;
end;
end;
end;
writeln(max_del);
{2}
ReadLn(a);
ReadLn(b);
del:= 0;
if a>b then min:=b else min:= a;
for i:= 1 to min do
begin
if (Round(a/i) = a/i) and (Round(b/i) = b/i) and (i>del) then del:= i;
end;
writeln(del);
end.
Неизвестный
27.09.2008, 21:49
общий
это ответ

Здравствуйте, [b]Заболотских Татьяна Сергеевна[/b]!

В приложении находятся примеры задач.

В первой задаче получается отношение 100. В общем, это и так понятно. Сами судите, для чисел 100, 200, 300, ..., 900 отношение равно 100. Далее любые отношения меньше в несколько раз (101/2=50.5; 201/3=67; 301/4=75.5; ...; 901/10=90.1).

Во второй задаче применен алгоритм Евклида
Реализации алгоритма для разных языков программирования можно найти здесь: Примеры реализации алгоритма Евклида

Удачи!

Приложение:
###### Задача №1 ######

program Q145225_1;

var
i, cSum: Integer;
maxDiv, curDiv: real;
maxI: Integer;
begin
{ сумма цифр числа 100 = 1 }
cSum:= 1;
maxDiv:= 100.0; { 100 / 1 }
{ число, для которого соотношение максимальное }
maxI:= 100;
{ перебор чисел }
for i:= 101 to 999 do
begin
{ сумма цифр обычно увеличивается на 1 }
Inc(cSum);
{ если число i кратно 10 }
if ((i mod 10) = 0) then
begin
{ если кратно 100 }
if ((i mod 100) = 0) then
{ уменьшаем сумму на 18 }
Dec(cSum, 18)
else
{ иначе уменьшаем на 9 }
Dec(cSum, 9);
end;
{ здесь можете сделать контроль, если желаете... }
{ WriteLn('i = ', i, '; cSum = ', cSum); }

{ определяем отношение числа i к сумме его цифр }
curDiv:= i/cSum;
{ сравниваем с максимальным отношением }
if (curDiv > maxDiv) then
begin
{ запоминаем новое отношение }
maxI:= i;
maxDiv:= curDiv;
end;
end;

{Вывод результата}
Write('i = ', maxI, '; ');
WriteLn('maxDiv = ', maxDiv);

{Ожидание нажатия пользователем любой кнопки}
WriteLn;
WriteLn('Press any key...');
ReadLn;
end.

###### Задача №2 ######

program Q145225_2;

{ ищем НОД, пользуясь алгоритмом Евклида }
function nod(var a, b: Integer): Integer;
begin
while (a <> 0) and (b <> 0) do
if a >= b then
a:= a mod b
else
b:= b mod a;
nod:= a + b
end;

var
a, b: Integer;
begin
{ Ввод а и б }
write('a = '); ReadLn(a);
write('b = '); ReadLn(b);

{ Вывод результата }
WriteLn('NOD(a, b) = ', nod(a, b));

{Ожидание нажатия пользователем любой кнопки}
WriteLn;
WriteLn('Press any key...');
ReadLn;
end.
Форма ответа