求程序解决方法

来源:百度知道 编辑:UC知道 时间:2024/06/20 20:52:53
本人用PASCAL
N个人站成一圈,从某个人开始数数,每次数到M的人就被杀掉,然后下一个人重新开始数,直到最后只剩一个人.
现在有一圈人,K个好人站在一起,K个坏人站在一起,从第一个好人开始数数.你要确定一个最小的M.使得在第一个好人被杀死之前,K个坏人先被杀死.
o<k<=14

program lianxi;
var link:array[1..28]of byte;
{}{}i,k:byte;
function kill(m:byte):boolean;
{}var i,j,pre,p:byte;
{}begin
{}{}for i:=1 to 2*k-1 do link[i]:=i+1;
{}{}link[2*k]:=1;
{}{}i:=0;pre:=2*k;p:=1;
{}{}repeat
{}{}{}for j:=1 to m-1 do
{}{}{}{}begin pre:=p;p:=link[pre];end;
{}{}{}if p<=k{好人} then exit(false);
{}{}{}{kill掉坏人}
{}{}{}link[pre]:=link[p];p:=link[pre];
{}{}{}inc(i);
{}{}until i=k;
{}{}kill:=true;
{}end;

BEGIN
{}readln(k);
{}for i:=k+1 to 2*k do
{}{}if kill(i) then writeln(i);
END.

program 001;
var
a:array [1..100] of integer;
i,n,t,j,g,s:integer;
begin
writeln('n=?');
readln(n);
writeln('t=?');
readln(t);
for i:=1 to n do a[i]:=1;
j:=n;i:=0; s:=0;
while j>1 do
begin
i:=i+1;
if i=n+1 then i:=1;<