| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3975 人关注过本帖, 1 人收藏
标题:最长平台问题
只看楼主 加入收藏
ttaix
Rank: 1
等 级:新手上路
帖 子:29
专家分:0
注 册:2007-7-28
收藏(1)
 问题点数:0 回复次数:13 
最长平台问题
一个从小到大排列的数组,这个数组中的一个平台就是连续的一段值相同的元素。例如:122333445中22,333等都是平台,333为最长平台。

试编写程序,
1)接收一个数组,把这个数组中的最长的平台找出来
2)指出最长平台的位置
3)编写一个程序,接收一个已经从小到大排好的数组,把所有的平台和他们的位置找出来

请:重点解答第三个问题,3Q!
搜索更多相关主题的帖子: 平台 从小到大 位置 排列 
2008-01-06 16:20
ttaix
Rank: 1
等 级:新手上路
帖 子:29
专家分:0
注 册:2007-7-28
收藏
得分:0 
1)求最长平台的长度
程序代码:
/* ------------------------------------------------------ */
/*                  最长平台的长度length                  */
/* ------------------------------------------------------ */

int longest_plateau(int x[], int n)
{
     int  length = 1;         /* 平台长度大于等于1     */
     int  i;

     for (i = 1; i < n; i++)
          if (x[i] == x[i-length])
               length++;
     return length;
}
2)指出最长平台的位置;长度最后一次增加的平台的第一个元素的位置就是最长平台的起始位置
程序代码:
/* ------------------------------------------------------ */
/*                     最长平台的位置p                    */
/* ------------------------------------------------------ */

int longest_position(int x[], int n,int p)
{
     int  length = 1;         /*  平台长度大于等于1     */
     int  i;

     for (i = 1; i < n; i++)
          if (x[i] == x[i-length])
               {length++;p=i-length+1;}
     return p;
}


[[italic] 本帖最后由 ttaix 于 2008-1-6 20:44 编辑 [/italic]]
2008-01-06 16:22
xianshizhe111
Rank: 1
等 级:新手上路
帖 子:1451
专家分:0
注 册:2007-12-8
收藏
得分:0 
你是说的C实现等值数据段吗?
2008-01-06 16:33
ttaix
Rank: 1
等 级:新手上路
帖 子:29
专家分:0
注 册:2007-7-28
收藏
得分:0 
回复 3# 的帖子
应该是找出给定数组中等值数据段,以及他们的位置和长度
2008-01-06 16:36
xianshizhe111
Rank: 1
等 级:新手上路
帖 子:1451
专家分:0
注 册:2007-12-8
收藏
得分:0 
我给你找一下我编的用C实现等值序列
2008-01-06 16:40
xianshizhe111
Rank: 1
等 级:新手上路
帖 子:1451
专家分:0
注 册:2007-12-8
收藏
得分:0 
/*键盘连续输入对你可能有用*/
/*输出最大的一段数列的(起始,终止,和长度)要想全部输出改一下输出位置*/
/* c语言实现等值数列段*/
#include<stdio.h>
#include<conio.h>

void main()
{
  int i=0,j,k=0;
  int temp,tel;
  int a[50],b[50];
  int MAX_ARRAY;
  int start[200],end[200],length[200];

  /*clrscr();*/

  printf("Please input some numbers:\n");
  printf("PUT :");
  while((a[i]=getchar())!='\n')
     {
       /*a[i]=getchar();*/
       b[i]=a[i];
       i++;
     }
     MAX_ARRAY=i;
    for(i=0;i<MAX_ARRAY;i++)
      { temp=a[i];
          

       for(j=i+1;j<MAX_ARRAY;j++)

      { if(temp==a[j])

           {
             start[k]=i;
             end[k]=j;
             length[k]=(end[k]-start[k]+1);
             k++;
           }

       }

    }
    if(k==0)
      printf("NOT DATA:\n");
    else  
     { printf("OUT  :\n");
       tel=0;
       for(i=1;i<k;i++)
          printf("start=%d,end=%d,length=%d\n",start[i-1],end[i-1],length[i-1]);
         /*if(tel<length[i])
          tel=length[i];
         else
          break;*/
      
     }  

}/*已经修改*/

[[italic] 本帖最后由 xianshizhe111 于 2008-1-6 18:32 编辑 [/italic]]
2008-01-06 16:48
ttaix
Rank: 1
等 级:新手上路
帖 子:29
专家分:0
注 册:2007-7-28
收藏
得分:0 
不行,你运行时可以的?
输出不是最长平台的参数,最后那条输出语句的i是什么意义啊?数组中元素两两比较的相等次数?
2008-01-06 17:45
xianshizhe111
Rank: 1
等 级:新手上路
帖 子:1451
专家分:0
注 册:2007-12-8
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册

你再好好查查
最后输出要是加在for下
就输出的是每小段的相同段11222
结果是11 是一段
第二个 22  一段
第三个 222  一段
 

你的意思是
11 一段
222 一段

这个程序当时我想了两整天
你好好改一下程序
这种方法要比上一种方法好做很多.
我再把那程序修改一下你在此基础上就好做多了
2008-01-06 18:31
ttaix
Rank: 1
等 级:新手上路
帖 子:29
专家分:0
注 册:2007-7-28
收藏
得分:0 
回复 8# 的帖子
就输出的是每小段的相同段11222
结果是11 是一段
第二个 22  一段
第三个 222  一段

按你的程序3个连着的2会有3段,而且程序中有些不合理的地方(b数组就没有用到),比较次数太多,最重要的是和我要问的有一定距离,我水平很有限,在你的基础上解不出。
你很热心,真的很谢谢你。
2008-01-07 12:02
xianshizhe111
Rank: 1
等 级:新手上路
帖 子:1451
专家分:0
注 册:2007-12-8
收藏
得分:0 
你说的没错(b)数组是我调试时用的之后没有去掉
漫漫理解
我的第一步做的就是你的方案
第二步是另一方案.
这已经不太难了
做完时比较一下看一看
2008-01-07 12:17
快速回复:最长平台问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.013352 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved