飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 2705|回复: 3

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

[复制链接]

该用户从未签到

发表于 2007-12-14 16:02:39 | 显示全部楼层 |阅读模式
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值;依此规律重复下去,直到剩下最后一个人。最后剩下的是哪一个人?(要求:只能使用数组、字符串解决问题,不能使用指针、链表)
PYG19周年生日快乐!

该用户从未签到

发表于 2007-12-14 20:03:34 | 显示全部楼层
呵呵,看下,用我学的vfp解决
PYG19周年生日快乐!

该用户从未签到

 楼主| 发表于 2007-12-19 19:19:45 | 显示全部楼层
此题没有人回复吗?汗~~~
PYG19周年生日快乐!
  • TA的每日心情
    开心
    4 天前
  • 签到天数: 22 天

    [LV.4]偶尔看看III

    发表于 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-1  do
            begin
              j:=0;
              while j<f  do
                 begin
                   if temp then  j:=j+1;

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

            end;


          for i:=1 to n  do
            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.
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表