CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  数据库相关

如何在Delphi中实现求某一集合的子集

楼主zyp2005(zyp1982)2005-08-18 17:15:10 在 Delphi / 数据库相关 提问

设现有一属性集合A={a,b,c,d,e},如何用循环实现求A中包含i个属性的全体子集(i=1,2,3,4,5). 问题点数:50、回复次数:5Top

1 楼Eastunfail(龍子龍孫) (Serpent's Embrace)回复于 2005-08-18 17:50:03 得分 0

type   TElement=(a,b,c,d,e);  
  TElements=set   of   TElement;  
  const  
      ElementName:array[TElement]of   char=('a','b','c','d','e');  
      function   ElementsToStr(Elements:TElements):string;  
      var   i:TElement;  
      begin  
          Result:='';  
          for   i:=low(TElement)   to   high(TElement)   do  
              if   i   in   Elements   then   Result:=Result+ElementName[i]+'   ';  
      end;  
  var   Elements:TElements;i:Integer;Data:byte   absolute   Elements;  
   
  begin  
      for   i:=1   to   (1   shl   5)   do  
      begin  
          Data:=i;  
          Writeln(ElementsToStr(Elements));  
      end;  
  end.Top

2 楼Eastunfail(龍子龍孫) (Serpent's Embrace)回复于 2005-08-18 17:52:32 得分 0

更加难懂一点就把ElementsToStr改为:  
      function   ElementsToStr(Elements:TElements):string;  
      var   i:TElement;  
      begin  
          Result:='';  
          for   i   in   [a..e]   do  
              if   i   in   Elements   then   Result:=Result+ElementName[i]+'   ';  
      end;  
   
  呵呵Top

3 楼shusure()回复于 2005-08-19 10:27:02 得分 30

Eastunfail:你好!谢谢你的回复。我的问题可能提得不够清楚。  
  我想实现下述功能:  
    属性集合A={a,b,c,d,e},我想得到包含i个属性的子集,(i=1..5)  
  即:1个属性{a},{b},{c},{d},{e};  
          2个属性{a,b},{a,c},{a,d},{a,e},{b,c},{b,d},{b,e},{c,d},{c,e},{d,e};  
          3个属性{a,b,c},{a,b,d},{a,b,e},{b,c,d},{b,c,e},{c,d,e};  
          4个属性{a,b,c,d},{a,b,c,e},{b,c,d,e};  
          5个属性{a,b,c,d,e}.  
  且用一个string型变量str来存放包含i个属性的子集,最外层循环用变量i来控制。Top

4 楼Eastunfail(龍子龍孫) (Serpent's Embrace)回复于 2005-08-19 11:13:30 得分 20

从原来的代码改的,效率低了点:  
   
  type   TElement=(a,b,c,d,e);  
  TElements=set   of   TElement;  
  const  
  ElementName:array[TElement]of   char=('a','b','c','d','e');  
      function   ElementsToStr(Elements:TElements):string;  
      var   i:TElement;  
      begin  
          Result:='';  
          for   i   in   [a..e]   do  
          if   i   in   Elements   then   Result:=Result+ElementName[i]+'   ';  
      end;  
      function   GetSize(int:byte):Integer;  
      var   i:Integer;  
      begin  
          Result:=0;  
          for   i:=0   to   7   do  
          begin  
              if   ((1   shl   i)   and   int)<>0   then  
                  Inc(Result);  
          end;  
      end;  
      function   GetElements(Size:Integer):String;  
      var   Elements:TElements;i:Integer;Data:byte   absolute   Elements;  
      begin  
          Result:='';  
          for   i:=1   to   (1   shl   5)-1   do  
          begin  
              Data:=i;  
              if   GetSize(Data)=Size   then  
                  Result:=Result+'{'+TrimRight(ElementsToStr(Elements))+'}   ';  
          end;  
      end;  
  begin  
      Writeln(GetElements(1));  
      Writeln(GetElements(2));  
      Writeln(GetElements(3));  
      Writeln(GetElements(4));  
      Writeln(GetElements(5));  
  end.Top

5 楼zyp2005(zyp1982)回复于 2005-08-23 15:54:22 得分 0

虽然这个问题我自己已经解决了,但仍然很感谢大家,再此给各位高手撒分了Top

相关问题

  • ( winform ) 集合A是集合B的子集,C#什么算法可以求出 B-A ???
  • 用java做一个“求集合子集的”算法。
  • 怎样生成一个集合的所有子集?
  • 请问在SQL里面怎么判断一个集合是不是另一个集合的子集合?
  • 求出一个整数组成的集合的所有子集的算法
  • 请问怎样实现集合?
  • delphi中集合的写法问题
  • 弱问题:如何用C实现delphi中的in 功能,即判断一个变量的值是否属于集合中的一个元素值
  • 何如用递归实现显示一个数列的所有子集???
  • 何如用递归实现显示一个数列的所有子集???

关键词

  • 属性
  • telements
  • elementstostr
  • 子集
  • getelements
  • writeln
  • elementname
  • elements
  • 实现
  • shl

得分解答快速导航

  • 帖主:zyp2005
  • shusure
  • Eastunfail

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo