Chinaunix首页 | 论坛 | 博客
  • 博客访问: 180153
  • 博文数量: 43
  • 博客积分: 611
  • 博客等级: 中士
  • 技术积分: 1053
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-02 13:37
文章存档

2015年(3)

2013年(23)

2012年(17)

我的朋友

分类: C/C++

2012-12-25 14:41:00

         问题描述:已知一个已经从小到大排序的数组,这个数组中的一个平台就是连续的一串值相同的元素,并且这一串元素不能再延伸。例如,在1,2,2,3,3,3,4,5,5,6中1,2.2,3.3.3,4,5.5,6都是平台。编写一个程序,接收一个数组,把这个数组中最长的平台找出来。在上面的例子中3.3.3就是该数组中最长的平台。

          代码如下:


点击(此处)折叠或打开

  1. #include <stdio.h>
  2.  #define MAX 1000
  3.  
  4.  void max_platform_recur(int level);
  5.  int target[]={1,2,2,3,3,3,4,5,5,6};
  6.  int len=sizeof(target)/sizeof(int);
  7.  int distance=1;
  8.  int result[MAX]={0};
  9.  
  10.  int main()
  11.  {
  12.      result[0]=1;
  13.      int i,j;
  14.      max_platform_recur(0);
  15.  
  16.      //打印出最长的平台
  17.      for(i=0;i<len;i++)
  18.      {
  19.          if(result[i]==distance)
  20.          {
  21.              printf("distance: %d\n",distance);
  22.              for(j=0;j<distance;j++)
  23.                  printf("%d ",result[i]);
  24.              printf("\n");
  25.          }
  26.      }
  27.  }
  28.  
  29.  void max_platform_recur(int level)
  30.  {
  31.      if(level+distance>=len)
  32.          return ;
  33.      if(target[level+distance]==target[level])
  34.      {
  35.          result[level]=++distance;
  36.          max_platform_recur(level);
  37.      }
  38.      else
  39.      {
  40.          level+=distance;
  41.          max_platform_recur(level);
  42.      }
  43.  }
       如果您觉得我的文章对您有帮助,请顶一下,非常感谢!

阅读(1421) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~