扑克牌A级算法..PASCAL

来源:百度知道 编辑:UC知道 时间:2024/06/23 14:53:26
扑克牌....
跟魔术师翻牌的题目描述差不多..
不过牌数是不定的..

A级算法是指像下列程序计算法:
var a:array[1..100]of longint;
b:array[0..100]of longint;
n,m,i,j,k,p:longint;
begin readln(n,m);
for i:=1 to n-1 do a[i]:=i+1;
a[n]:=1;j:=n;k:=1;p:=0;
repeat j:=a[j];k:=k+1;
if k=m then begin
b[p]:=a[j];
p:=p+1;
a[j]:=a[a[j]];
k:=1;
end;
until p=n;
write(b[n-1]);
end.
(有N个数,间隔M出列,最后出列是谁)

不太明白./
求解..
有代码更好.
追加20分..
分不多了.

呃...还是队列问题啊...

把N个数入队,然后每次把队列最前面的元素出队,再入队放到队尾,用个变量记下现在是第几个数.数到第M个数时这个数就只出队不入队,也就是删掉了这个数,然后重新从1开始计数重复上面内容.
这样出啊出啊入啊入啊一直到最后一个出队的数就行了啊....

PASCAL有没有函数或过程的概念?
如果有的话,你既然这么多队列应用题...应该写一个队列的基本操作的函数,比如出队,入队,判断队列是否是空的等等...然后每次编应用题的时候把你写好的这些东西直接复制进去...

分不多就不追加了..