博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
用pl/sql游标实现约瑟夫环
阅读量:5932 次
发布时间:2019-06-19

本文共 1104 字,大约阅读时间需要 3 分钟。

什么是约瑟夫环:

约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为1的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。通常解决这类问题时我们把编号从0~n-1,最后结果+1即为原问题的解。

创建一个全局临时表:

create global temporary table temp(t_id int) on commit delete rows;

游标实现约瑟夫环:

declare  --总人数  v_total number:=&v_total;  --对应的m  v_step number:=&v_step;  --剩余的人数  v_surplus number;  --计数  v_count number:=0;begin  --将数据插入到表中  for i in 1..v_total loop    insert into temp values(i);  end loop;  v_surplus:=v_total;  while v_surplus>1 loop    --声明一个游标    declare      cursor c_temp      is      select * from temp;      c_row c_temp%rowtype;    begin      open c_temp;        loop        fetch c_temp into c_row;        exit when c_temp%notfound;        v_count:=v_count+1;        --判断是否报到m的倍数,是则从表中删除        if mod(v_count,v_step)=0 then          dbms_output.put_line(c_row.t_id);          delete from temp where t_id=c_row.t_id;        end if;      end loop;      close c_temp;    end;    --重新计数剩余的人数    select count(*) into v_surplus from temp;  end loop;  commit;end;

转载于:https://www.cnblogs.com/zhazhapan/p/sql_joseph.html

你可能感兴趣的文章
iphone-common-codes-ccteam源代码 CCTableTipView.h
查看>>
iphone-common-codes-ccteam源代码 CCUIColor.h
查看>>
使用记事本编写java程序并编译
查看>>
laravel中 url() route() URL::asset()
查看>>
T-sql游标循环体内再嵌套游标的存储过程
查看>>
160809230张钊·
查看>>
OTRS
查看>>
[Contest20180418]数学竞赛
查看>>
linux下的vim使用笔记
查看>>
WEB开发中两个新建模版的比较(仅针对VS2008讨论):新建网站》ASP.NET网站和新建项目》ASP.NET WEB 应用程序...
查看>>
很有道理的文章
查看>>
urllib.urlencode() 无法encode中文, UnicodeEncodeError
查看>>
持续集成 解决 Jenkins 中无法展示 HTML 样式的问题
查看>>
charles工具过滤腾讯视频播放器广告
查看>>
office-excel
查看>>
elk6.3 centos集群搭建 head插件安装
查看>>
jquery ui 的弹出窗体 dialog 高度会产生变化
查看>>
页面架构(笔记2)——垂直居中布局
查看>>
浅拷贝深拷贝
查看>>
java中的加密技术详细解析
查看>>