с задачей на вывод чисел на Ассемблер NASM intel x86: Задание во вложении. Можно приложить самый простой вариант, нужно хоть что-то , приложите файлы с расширением .asm и .com и при возможности блок схему действий кода к ответу (либо просто его прокомментируйте !
Видел примеры решения таких задач (пример во вложении, но кажется, что он не корректный)
Если игра безошибочна, тогда первый игрок может первым ходом увеличить в 3 раза вторую кучу (2*3=6), второй не станет увеличивать эту-же на 3 т.к сразу проиграет (18>17),
1) он может увеличит первую на три, тогда второй эту же увеличит на 3 и результат 1*3(2)*3(1)=9
9+6=15, первый победит
2)первый игрок будут играть аккуратно и постоянно прибавлять по 2 во вторую кучу, поскольку и в первого "безошибочная игра", то он не станет прибавлять в 1 2 камня(1+2=3, первый умножает эту кучу на 3 и результат 6+(3*3)=15), поэтому и первый и второй будут прибавлять во вторую кучу 6_{1}+2_{2}+2_{1}+2_{2}+2_{1}=15+2_{2}=176
Если игра безошибочна, тогда первый игрок может первым ходом увеличить в 3 раза вторую кучу (2*3=6), второй не станет увеличивать эту-же на 3 т.к сразу проиграет (18>17),
1) он может увеличит первую на три, тогда второй эту же увеличит на 3 и результат 1*3(2)*3(1)=9
9+6=15, первый победит
2)первый игрок будут играть аккуратно и постоянно прибавлять по 2 во вторую кучу, поскольку и в первого "безошибочная игра", то он не станет прибавлять в 1 2 камня(1+2=3, первый умножает эту кучу на 3 и результат 6+(3*3)=15), поэтому и первый и второй будут прибавлять во вторую кучу 6_{1}+2_{2}+2_{1}+2_{2}+2_{1}=15+2_{2}=176
1
+2
2
+2
1
+2
2
+2
1
=15+2
2
=17 17=17 (что по условию не подходит), выиграл 1
Логистинг задачи:
var i,n,max,d:LongInt;
x1,x2:Real;
begin
max:=1;
Read(n);
for i:=1 to n div 2 do
begin
d:=sqr(2*i-1)+8*n;
if d<0 then Continue;
x1:=((1-2*i)-sqrt(d))/2;
x2:=((1-2*i)+sqrt(d))/2;
if (frac(x1)=0) and (x1>max) then
begin
max:=Round(x1);
Break;
end;
if (frac(x2)=0) and (x2>max) then
begin
max:=Round(x2);
Break;
end;
end;
Writeln(max);
end.
Листинг программы:
var n, s: longint;
begin
readln(s);
s := 2 * s; {лучше s := s shl 1;}
n := trunc(sqrt(s)); {можно, как планировалось, n := trunc(sqrt(s + 0.25) - 0.5);}
while n > 1 do
if (s mod n = 0) and odd(s div n - n)
then break
else dec(n);
writeln(n)
end.