CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  新手乐园

求肋高手来帮解决一下算法设计与分析几道题目

楼主maanchun()2006-06-02 13:34:50 在 C/C++ / 新手乐园 提问

《算法设计与分析》  
   
  设计程序完成以下题目,并分析你的程序的时间和空间复杂性  
  一、 输出m个元素中取n个元素的所有排列。  
   
   
   
   
   
  二、输出m个元素中取n个元素的所有组合。  
   
   
  三、错排问题。输出序列1,2,…,n的所有排列中满足元素i(1≤i≤n)不在第i个位置的排列。  
   
   
   
  四、输入n,表示有n级楼梯,一次踏步允许走1或2级,问n级楼梯有几种走法。  
  例:n=2,有2种走法;n=3,有3种走法。  
   
   
   
  五.输入n行,每行有两个元素,第一个表示元素值,第2个表示该元素个数。求从这些元素取m个元素的所有组合(排列数)。  
  例:n=3  
          2,3    
          4,1  
          5,2  
  求(2‚2‚2‚4‚5‚5)中取m=3个元素的组合(排列)  
  比较各种排序算法的时间及空间复杂性。  
   
  下面程序段的时间复杂度为____c   ____。  
          for   (int     i=0;     i<m;     i++)  
                for   (int     j=0;     j<n;     j++)  
                      a[i][j]   =   i*j;  
        A.O(m2)               B.O(n2)                 C.O(m*n)               D.O(m+n)  
  5.执行下面程序段时,执行S语句的次数为___a______。  
          for   (int     i=1;     i<n;     i++)  
                for   (int     j=1;     j<i;     j++)  
                      S;  
        A.n2               B.n2/2                 C.n(n+1)               D.n(n+1)/2  
  6.下面算法的时间复杂度为_________。  
              int     f(unsigned     int     n)   {  
                  if   (n==0)   ||   n==1)     return     1;  
                  else     return     n*f(n-1);  
              }  
        A.O(1)               B.O(n)                 C.O(n2)               D.O(n!)  
  程序段的时间复杂度为___c_____。  
                  int     i=0   ,   s=0;  
                  while   (++i<=n)   {  
                          int     p=1;  
                          for   (int     j=1;     j<=i;     j++)     p*=   j;  
                          s   =   s+p;  
                  }  
  (1)   char     Compare(SimpleType     x1   ,   SimpleType     x2)  
        {  
                  if   (x1>x2)     return     ‘>’;  
                  else   if   (x1==x2)     return     ‘=’;  
                  else     return     ‘<’;  
        }  
        时间复杂度:O(1)。  
   
   
   
  (2)   void     Reverse(char   *   p)  
        {  
                int     n   =   strlen(p);  
  for   (int     i=0;     i<n/2;     i++)   {  
          char     ch   =   p[i]  
                        p[i]   =   p[n-i-1];  
                        p[n-i-1]   =   ch;  
                }  
        }  
  时间复杂度:O(n)。  
   
   
   
  (3)   double     Product(double     a   [   ]   ,   int     n)  
      {  
  double     p   =   1;  
          for   (int   i=0;     i<n;     i++)   p   *=   a[i];  
  return     p;  
  }  
  时间复杂度:O(n)。  
   
   
   
   
  指出下列各算法的功能,并求出其时间复杂度。  
  (1)   int     Prime(int     n)  
  {  
  int     i   =   1;  
  int     x   =   (int)sqrt(n);  
  while   (++i<=x)  
  if   (n%i   ==   0)   break;  
  if   (i>x)     return     1;  
  else     return     0;  
  }  
   
   
   
  (2)   int     sum1(int     n)  
  {  
  int     p   =   1   ,   s   =   0;  
  for   (int     i=1;     i<=n;     i++)   {  
  p   *=   i;  
  s   +=   p;  
  }  
  return     s;  
  }  
   
   
   
   
  (3)   int     sum2(int     n)  
  {  
  int     s   =   0;  
  for   (int     i   =   1;     i<=n     i++)   {  
  int     p   =   1;  
  for   (int     j=1;     j<=i;     j++)  
  p   *=   j;  
  s   +=   p;  
  }  
  return     s;  
  }  
   
   
   
   
  (4)   int     fun(int     n)  
  {  
  int     i=1   ,   s=1;  
  while   (s<n)  
  s   +=   ++i;  
  return     i;  
  }  
   
   
   
   
  (5)void     UseFile(ifstream   &   inp   ,   int     c[10])  
          //   假定inp所对应的文件中保存有n个整数  
  {  
  for   (int     i=0;     i<10;     i++)  
  c[i]   =   0;  
  int     x;  
  while   (inp>>x)   {  
  i   =   x%10;  
  c[i]++;  
  }  
  }  
   
   
   
   
   
  (6)   void     mtable(int     n)  
  {  
  for   (int     i=1;     i<=n;     i++)   {  
  for   (int     j=i;     j<=n;     j++)  
  cout     <<i<<"*"<<j<<"="<<setw(2)<<i*j<<"   ";  
  cout     <<endl;  
  }  
  }  
   
   
   
   
  (7)   void     cmatrix(int     a[M][N]   ,   int     d)  
          //   M和N为全局整型常量  
  {  
  for   (int     i=0;     i<M;     i++)  
  for   (int     j=0;     j<N;     j++)  
  a[i][j]   *=   d;  
  }  
   
   
   
   
  (8)   void     matrimult(int     a[M][N]   ,   int     b[N][L]   ,   int     c[M][L])  
          //   M,N和L均为全局整型常量  
  {  
  int     i   ,   j   ,   k   ;  
  for   (i=0;     i<M;     i++)  
  for   (j=0;     j<N;     j++)  
  c[i][j]   =   0;  
  for   (i=0;     i<M;     i++)  
  for   (j=0;     j<L;     j++)  
  for   (k=0;     k<N;     k++)  
  a[i][j]   +=   a[i][k]*b[k][j];  
  }  
  问题点数:20、回复次数:3Top

1 楼wanfustudio(雁南飞:知识之败,慕虚名而不务潜修也)回复于 2006-06-02 13:54:41 得分 0

考试啊?  
  5555555555555555Top

2 楼mLee79()回复于 2006-06-02 22:01:12 得分 0

作业贴,鉴定完毕..Top

3 楼boxban(冻酸梨)回复于 2006-06-02 23:13:54 得分 0

四、输入n,表示有n级楼梯,一次踏步允许走1或2级,问n级楼梯有几种走法。  
  例:n=2,有2种走法;n=3,有3种走法。  
  -------------------------------------  
  实际上就是费波纳契函数:  
  F(2)   =   2  
  F(3)   =   3  
  F(n)   =   F(n-1)   +   F(n-2)Top

相关问题

关键词

得分解答快速导航

  • 帖主:maanchun

相关链接

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

广告也精彩

反馈

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