CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

征求代码

楼主jimi_chen(小鸡吃米)2002-10-11 15:29:32 在 C/C++ / C语言 提问

 
  函数  
  参数:string[20]   存取待选择的20个string  
  返回值:   string[n]   选中的string  
  功能:  
  从string[20]中任意(随机)取出n个string  
   
  要求  
  效率高 问题点数:20、回复次数:7Top

1 楼blue_coco(椰子)回复于 2002-10-11 15:48:31 得分 20

最优的就是随机选择后交换元素的算法  
  #include   <time.h>  
  #include   <stdlib.h>  
  #define   NUM   20    
  #define   N   10  
  #define   SWAP(p,q)   {u=(p);(p)=(q);(q)=u;}  
   
  const   int   a[]   =   {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19};  
  int   x[N];  
   
  void   out(int   *x)  
  {  
   
  int   u,i,p;  
  for(i=0;i<N;i++)  
  {  
  p=rand()%(NUM-i);  
  x[i]=a[p];  
  SWAP(a[p],a[NUM-i]);  
  }  
  }  
   
  数组x中存放被选的n个string号。Top

2 楼zhf777(八步)回复于 2002-10-11 15:57:44 得分 0

好麻烦阿Top

3 楼asvaboy1980(蓝boy)回复于 2002-10-11 16:14:31 得分 0

有点,支持一下Top

4 楼jimi_chen(小鸡吃米)回复于 2002-10-11 16:21:02 得分 0

完美的算法Top

5 楼jimi_chen(小鸡吃米)回复于 2002-10-11 16:36:41 得分 0

完美的算法    
  bug?:SWAP(a[p],a[NUM-i-1]);Top

6 楼xdspower(杂食菜熊)回复于 2002-10-11 16:43:14 得分 0

你的n参数怎么传入,后面看你是要接收一个字符串数组,则你该提供标准的接口别人才好提供代码,还有你的选取串按理是不能有重复的吧。由于你只有20个字符串,量比较小,其实用简单的方法就可以获得好的效率。  
  我用伪码实现:  
  bool   out(int   n,(string   *   )rtu,const   string   in[20]){//0<n<=20     表示要选取的量,rtu用于接收结果,in是源串  
  int   a[20]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19};//表示string位置的变量  
  string   *   rp=rtu;//用于接收rtu指针基址  
  int   wap;//位置标号交换变量  
  int   rini;//获得的随机变量值  
  if   (n>20)   return   false;  
  for   (int   i=0;i<20;i++){  
            rini=rand(20-1);//取[0,19]的随机整数  
            wap=a[i];  
            a[i]=a[rini];  
            a[rini]=wap;  
            }  
  for   (int   i=0;i<n;i++)  
            {if(in[a[i]]!=null)   *(rp+i)=in[a[i]];  
              elss   return   false;  
            }  
  *(rp+n)=null;  
  return   true;  
  }  
  整个算法时间复杂度是基本上是个常量,因为n十分小,最大才20,其实也没有讨论复杂度的必要了,注意的是算法中不要出现不能匹配的问题,比如这个问题用简单抽取法(取一个位置随机数,取值后把相应位置置空,再取位置随机数),要保证最后的串不重复就可能怎么也匹配不了。  
   
  Top

7 楼xdspower(杂食菜熊)回复于 2002-10-11 16:56:01 得分 0

blue_coco(椰子)的算法可能存在重复串问题。Top

相关问题

  • 征求一个代码!!!!!!
  • 征求一个代码!!!!!!
  • 征求穿越代理的源代码!!!!!!!
  • 征求Socket通信例程代码
  • ★★★★★---高分征求破译如下代码---★★★★★!
  • ★★★★★---高分征求破译如下代码---★★★★★!!
  • help!高分征求源代码
  • 征求好看的DataGrid代码。
  • 征求生成3/9条形码的源代码!!
  • 征求各高手代码优化心得

关键词

  • 选择
  • define
  • include

得分解答快速导航

  • 帖主:jimi_chen
  • blue_coco

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

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