永发信息网

今有一堆火柴,两人依次从中拿取,规定每次只能从一堆中取若干根, 拿走最后一根的获胜。用pascal语言做出来

答案:2  悬赏:0  手机版
解决时间 2021-02-04 18:53
如果没有火柴拿就算输了

或者说有50根火柴,每人最多拿5跟,谁最后没的拿就输了。用pascal语言编程,求高手帮忙,感谢了!!!!
最佳答案
最后一次剩下的超过5根和不剩一根获胜,否则输掉。
每次观察一下剩几根,可以控制除第一次外,每次两个人恰好拿1+5=6根。
只要第一次控制剩余的根数,除以6余0即可
全部回答

type st=array[0..30] of longint;
var ans:st;f:array[1..80,1..80] of st;a:array[1..80] of longint;
m,n:longint;
procedure add(var x:st;y,z:st);
var temp,i:longint;
begin
   temp:=0;
   if y[0]>z[0] then x[0]:=y[0] else x[0]:=z[0];
   for i:=1 to x[0] do
   begin
    temp:=y[i]+z[i]+temp;
    x[i]:=temp mod 10000;
    temp:=temp div 10000;
   end;
   if temp>0 then begin inc(x[0]); x[x[0]]:=temp;end;
end;

procedure mul(var x:st);
var temp,i:longint;
begin
  temp:=0;
  for i:=1 to x[0] do
   begin
    temp:=x[i]*2+temp;
    x[i]:=temp mod 10000;
    temp:=temp div 10000;
   end;
  while temp>0 do begin inc(x[0]);x[x[0]]:=temp mod 10000;temp:=temp div 10000;end;
end;

procedure plus(var x:st;y:st;z:longint);
var i:longint;
begin
   x:=y;inc(x[1],z);i:=1;
   while x[i]>=10000 do
    begin
    x[i+1]:=x[i] div 10000+x[i+1];
    x[i]:=x[i] mod 10000;
    inc(i);
    if x[0]<i then x[0]:=i;
    end;
end;

function compare(a,b:st):boolean;
var i:longint;
begin
   if a[0]>b[0] then exit(true);
   if a[0]<b[0] then exit(false);
   for i:=a[0] downto 1 do
    if a[i]>b[i] then exit(true)
    else if a[i]<b[i] then exit(false);
   exit(false);
end;

procedure dp;
var i,j:longint;max,min:st;
begin
   fillchar(f,sizeof(f),0);
   for i:=1 to m do begin f[i,i][0]:=1;f[i,i][1]:=a[i]*2;end;
   for i:=m-1 downto 1 do
    for j:=i+1 to m do
    begin
    plus(max,f[i+1,j],a[i]);
    mul(max);
    plus(min,f[i,j-1],a[j]);
    mul(min);
    if compare(min,max) then max:=min;
    f[i,j]:=max;
    end;
  add(ans,ans,f[1,m]);
end;

procedure re;
var i,j:longint;
begin
  readln(n,m);
  for i:=1 to n do
    begin
    for j:=1 to m do
    read(a[j]);
    readln;
    dp;
    end;  
end;

procedure print;
var i:longint;
begin
  write(ans[ans[0]]);
  for i:=ans[0]-1 downto 1 do
  begin
   write(ans[i] div 1000 mod 10);
   write(ans[i] div 100 mod 10);
   write(ans[i] div 10 mod 10);
   write(ans[i] mod 10);
  end;
end;

begin
  re;print;
end.

高精度也给粘上了,不高兴删了,dp的问题,将就着看吧

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
努玛村地址在哪,我要去那里办事
iphone刷机需要链接网络吗
【世界上最大的航空母舰】1、目前世界上最大
南京有什么“地方特色”礼品,各在哪里可以买
味欣源快餐店在哪里啊,我有事要去这个地方
湖人和快船共用一个球馆?
热定新村地址在什么地方,我要处理点事
请问,最佳前锋是亨利(泊号),
根据下题编写一个C语言程序 鸡兔同笼,已知鸡
家用冷喷机哪个牌子好?金稻的好吗?
查龙村地址有知道的么?有点事想过去
山蓟的意思是什么啊?知道的请说下!
叶绿体色素的纸层析结果显示,叶绿素b位于层
重庆工商职业学院合川校区-育能楼地址在什么
亨利得眼镜乌兰察布东路店在哪里啊,我有事要
推荐资讯
关于用Visual Basic加载项目弹出不断的错误提
天天美发地址好找么,我有些事要过去
上联:2+0+1+3+1+4=11(光棍),下联:2-0-1-
在电子商务领域比较著名的企业。
全网通手机卖场洋口店地址在哪,我要去那里办
铁路运输公司怎么去啊,有知道地址的么
做曲线运动的物体一定做抛体运动对吗?
钻阅的意思是什么啊?知道的请说下!
热中人的意思是什么啊?知道的请说下!
大家对我国未来十年内整个机械行业发展方向的
两个女性之间能叫好基友么?-_-
恒隆科技怎么去啊,有知道地址的么
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?