Предмет: Информатика,
автор: panikvidze
Пожалуйста, помогите разобраться с заданием!!
Приложения:
Ответы
Автор ответа:
1
Чтобы понять алгоритм, немного переделаем программу.
a:=0; b:=1;
while x>0 do begin
d:=x mod 6;
if x mod 2>0 then a:=a+d { х - нечетное }
else b:=b+d; {х - четное }
x:=x div 6
end;
Writeln(a,' ',b)
Обратим внимание на условие выполнения цикла.
while x>0 do begin
d:=x mod 6;
{ тут что-то делаем }
x:=x div 6
end;
Число х последовательно делится нацело на 6 до тех пор, пока оно не превратится в ноль. И на каждом шаге находится остаток от такого деления. Мысленно заменим 6 на 10. Узнаёте алгоритм? Это получение десятичных цифр d, начиная с младшего разряда. А если у нас не 10, а 6 - то получение цифр числа по основанию 6. Другими словами, тут происходит перевод числа в шестеричную систему счисления.
А что же делается с полученными шестеричными цифрами?
if x mod 2>0 then a:=a+d { х - нечетное }
else b:=b+d; {х - четное }
В переменной a накапливается сумма нечетных шестеричных цифр, в переменной b - сумма четных цифр.
По условию a=2, 2 - число четное и единственный способ получить его в виде суммы нечетных чисел - это 2 = 1+1.
Теперь мы знаем, что шестеричное представление искомого числа содержит две нечетные цифры и обе они равны 1.
По условию b=9, но начальное значение b=1, поэтому сумма четных шестеричных цифр равна 9-1, т.е. 8.
Четные шестеричные цифры - это 0, 2 и 4. Поскольку поставлена задача найти минимальное число, оно должно содержать минимальное количество разрядов. 8 = 4+4 - это еще две шестеричный цифры искомого числа. Теперь мы можем его записать: 1144₆
Осталось перевести его в десятичную систему: 1144₆=1×6³+1×6²+4×6¹+4×6⁰ = 216+36+24+4 = 280
Ответ: 280
a:=0; b:=1;
while x>0 do begin
d:=x mod 6;
if x mod 2>0 then a:=a+d { х - нечетное }
else b:=b+d; {х - четное }
x:=x div 6
end;
Writeln(a,' ',b)
Обратим внимание на условие выполнения цикла.
while x>0 do begin
d:=x mod 6;
{ тут что-то делаем }
x:=x div 6
end;
Число х последовательно делится нацело на 6 до тех пор, пока оно не превратится в ноль. И на каждом шаге находится остаток от такого деления. Мысленно заменим 6 на 10. Узнаёте алгоритм? Это получение десятичных цифр d, начиная с младшего разряда. А если у нас не 10, а 6 - то получение цифр числа по основанию 6. Другими словами, тут происходит перевод числа в шестеричную систему счисления.
А что же делается с полученными шестеричными цифрами?
if x mod 2>0 then a:=a+d { х - нечетное }
else b:=b+d; {х - четное }
В переменной a накапливается сумма нечетных шестеричных цифр, в переменной b - сумма четных цифр.
По условию a=2, 2 - число четное и единственный способ получить его в виде суммы нечетных чисел - это 2 = 1+1.
Теперь мы знаем, что шестеричное представление искомого числа содержит две нечетные цифры и обе они равны 1.
По условию b=9, но начальное значение b=1, поэтому сумма четных шестеричных цифр равна 9-1, т.е. 8.
Четные шестеричные цифры - это 0, 2 и 4. Поскольку поставлена задача найти минимальное число, оно должно содержать минимальное количество разрядов. 8 = 4+4 - это еще две шестеричный цифры искомого числа. Теперь мы можем его записать: 1144₆
Осталось перевести его в десятичную систему: 1144₆=1×6³+1×6²+4×6¹+4×6⁰ = 216+36+24+4 = 280
Ответ: 280
Автор ответа:
0
Я правда не понял смысл преобразований в этом алгоритме, поэтому поместил его в цикл от 100 до 999 (все трёхзначные числа). Вместо ввода числа, оно передавалось из переменной цикла.
И сделал выход из программы по условию a=2 и b=9.
После выполнения этой программы, в конце лога можно увидеть искомое трёхзначное натуральное число 280 (точнее, в последней строке будет напечатано 280 2 9 ).
Вот программа:
var
n, x, a, b: longint;
begin
for n := 100 to 999 do
begin
write(n,' ');
x := n;
a := 0; b := 1;
while x > 0 do
begin
if x mod 2 > 0 then
a := a + x mod 6
else
b := b + (x mod 6);
x := x div 6;
end;
writeln(a,' ',b);
if (a=2) and (b=9) then exit;
end;
end.
И сделал выход из программы по условию a=2 и b=9.
После выполнения этой программы, в конце лога можно увидеть искомое трёхзначное натуральное число 280 (точнее, в последней строке будет напечатано 280 2 9 ).
Вот программа:
var
n, x, a, b: longint;
begin
for n := 100 to 999 do
begin
write(n,' ');
x := n;
a := 0; b := 1;
while x > 0 do
begin
if x mod 2 > 0 then
a := a + x mod 6
else
b := b + (x mod 6);
x := x div 6;
end;
writeln(a,' ',b);
if (a=2) and (b=9) then exit;
end;
end.
Аноним:
Смысл таких задач в том, чтобы найти решение без компьютера. Подобные задания есть в ЕГЭ, а он сдается при помощи листика бумаги и ручки.
Похожие вопросы
Предмет: Алгебра,
автор: T0mat
Предмет: Алгебра,
автор: kinderap868
Предмет: Алгебра,
автор: Myrotvorec
Предмет: Математика,
автор: илья832