learnlife 发表于 2007-12-14 16:02:39

Delphi课外练习题1---约瑟夫环增强版

lvcaolhx发了一个Delphi课外练习题1---约瑟夫环,问题如下:
n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围:从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到剩下最后一个人。最后剩下的是哪一个人?(要求:只能使用数组、字符串解决问题,不能使用指针、链表)
测试数据:
6个人,报数4,从3开始,最终为1
15个人,报数5,从5开始,最终为5
10个人,报数5,从1开始,最终为3

现将此问题稍微复杂一些,为增强版,问题如下:
n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围:每人持有一个密码(正整数);从编号为k的人开始报数,数到m的那个人出列,将这个出列的人的密码作为新的m值;他的下一个人又从1开始报数,数到m的那个人又出列,再将这个出列的人的密码作为新的m值;依此规律重复下去,直到剩下最后一个人。最后剩下的是哪一个人?(要求:只能使用数组、字符串解决问题,不能使用指针、链表)

华佗 发表于 2007-12-14 20:03:34

呵呵,看下,用我学的vfp解决

learnlife 发表于 2007-12-19 19:19:45

此题没有人回复吗?汗~~~

clide2000 发表于 2007-12-30 10:16:24

6个人,报数4,从3开始,最终为1
15个人,报数5,从5开始,最终为5
10个人,报数5,从1开始,最终为3

测试通过,不知还有其他测试数据不?

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Label4: TLabel;
    Edit4: TEdit;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
private
    { Private declarations }
public
    { Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

function Seach(n:integer;f:integer;s:integer):integer;
var
temp:array of Boolean;
i,j:Integer;
   begin
   setlength(temp,n+1);
   for i:=0 to n do
       temp:=True;

   for i:=1 to n-1do
      begin
          j:=0;
          while j<fdo
             begin
               if temp thenj:=j+1;

               if (s+1)<n+1 then
               s:=s+1
               else
               s:=s+1-n;
             end;
          if (s-1)=0 then
             temp:=False
          else
             temp:=False;

      end;


      for i:=1 to ndo
      if temp then Result:=i;
   
   end;

procedure TForm1.Button1Click(Sender: TObject);
var
a:Integer;
begin
a:=Seach(StrToInt(Edit1.Text ),StrToInt(Edit2.Text ),StrToInt(Edit3.Text ) );
Edit4.Text :=IntToStr(a);
end;

end.
页: [1]
查看完整版本: Delphi课外练习题1---约瑟夫环增强版