While4. Дано целое число $$N$$ ($$> 0$$). Если оно является степенью числа 3, то вывести True, если не является — вывести False.
Решение:
1 2 3 4 5 6 7 8 9 10 11 |
program While4; var A,temp:Integer; begin Write('Введите A: '); Readln(A); temp:=1; while temp<A do //ищем максимальное 3 в степени temp:=temp*3; //которое не больше А Write(temp=A); end. |
Решение, через деление:
1 2 3 4 5 6 7 8 9 |
program While4; var A:Integer; begin Write('Введите A: '); Readln(A); while A mod 3 = 0 do A:=A div 3; Write(1=A); end. |
Другие задачи из раздела While можно посмотреть здесь.
Надо добавить условие. Т.к. 1 тоже является степенью числа 3, то
if n=1 then
write(true)
else
write(temp+3=0);
Являляется, но у нас в задаче N ($$>0$$) Тоесть неравенство строгое. А насколько мне известно только $$3^0=1$$
Тогда я не понял, почему задачник ругается на некоторых числах. ((
Решая задачи подряд в каждой следующей, наверное, ищешь что-то от предыдущей. Как результат мы(мое решение аналогично) проверяем число N на кратность(!!!!) трем, а не соответствие степеням 3.
[/crayon]
Да есть такая проблема… Когда решаю на скорость не дочитываю задание до конца. 🙁
Но иначе я не могу, слишком их уж много. Боюсь не дойти до конца. 🙁
Вся надежда на людей которые скажут, что нить типо «не работает».
Было:
Стало:
uses PT4Web;
var n: integer;
begin
Task(‘while4’);
read (n);
write ((n mod 3)=0)
end.
Это ошибочно, извините.
да действительно… мало раз делили… надо наверно как то так(сейчас не начем копилировать, не могу проверить):
А что значит 1=А? ( в самом конце программы)?
А кто-то может объяснить, что значит 1=А в конце программы?
1=А Это логическое выражение. И получается в Write выводится значение логического выражения, если A равно 1 то выводиться True, если A не равно 1 выводиться False.
Можете эту же программу с while переделать на repeat, пробовал сам сделать, но не получилось. Помогите, пожалуйста, если не трудно)
Первый вариант с repeat:
Второй вариант с repeat:
В первом варианте решения всегда True.
Наверно temp:=A; надо поменять на temp:=1; .
спасибо. Поправил 7 строчку 1 примера, как было сказано.
Самый простой вариант в одну переменную:
var
n:real;
begin
readln (n);
while n>1 do
begin
n:=n/3;
writeln(n);
end;
writeln (n=1);
end.