首页 新闻 会员 周边

为什么这个错了,那个对了?

0
悬赏园豆:5 [待解决问题]

题目

1003:最长相等子序列长度

Time/Memory Limit:1000 MS/32768 K
Submitted: 68 Accepted: 27

Problem Description

给定一个有n个元素的整数数组b,b中连续的相等元素构成的子序列称为平台。设计一个算法求b中最长平台的长度。

Input

第一行表示下面有m组数据,每组数据包括2行;每组数据中的第一行表示数组的长度n(不会超过20,但可为空表);每组数据中的第二行表示数组的所有元素。

Output

最长平台的长度。

Sample Input

2

8

11 3 8 8 8 8 8 7

10

11 3 3 25 8 8 8 8 8 7

Sample Output

5

5

正解

#include<iostream>
using namespace std;
int main()
{
 int n,x,a[100],s,max,i,j;
 cin>>n;
 while(n--)
 {
  cin>>x;
  for(i=0;i<x;i++)
   cin>>a[i];
  max=0;
  for(i=0;i<x;i++)
  {
   s=1;
   for(j=i+1;j<x;j++)
   {
    if(a[i]!=a[j])
     break;
    s++;
   }
   if(s>max)
    max=s;
  }
  cout<<max<<endl;
 }
 return 0;
}

另解(错误答案)

#include <iostream>
using namespace std;
class array
{
private:
 int data[21];
 int length;
public:
 array()
 {
  length=0;
 }
 array(int b[],int n)
 {
  int i;
  length=n;
  for(i=0;i<length;i++)
   data[i]=b[i];
 }
 int con()
 {
  int i,m=0,n=0;
  for(i=0;i<length-1;i++)
  {
   if(data[i]==data[i+1])
    m++;
   if(m!=0&&n!=0)
    n=(m>n?m:n);
   if(m!=0&&data[i]!=data[i+1])
   {  n=m;m=0;}
  }
  if(n!=0)
   return n+1;
  else
   return n;
 }
};
int main()
{
 int t,n,i,y;
 int a[20];
 cin>>n;
 while (n--)
 {
  cin>>t;
  for(i=0;i<t;i++)
   cin>>a[i];
  if (n<=20)
  {
  array A(a,t);
  y=A.con();
  cout<<y<<endl;
  }
 }
 return 0;
}

求正解与错解得不同,错解是错在哪里?呜呜

blue fire的主页 blue fire | 菜鸟二级 | 园豆:211
提问于:2012-09-23 09:51
< >
分享
所有回答(1)
0

int con()
{
int i,m=0,n=0;
for(i=0;i<length-1;i++)
{
if(data[i]==data[i+1])
m++;
if(m!=0&&n!=0)
n=(m>n?m:n);
if(m!=0&&data[i]!=data[i+1])
{ n=m;m=0;}
}
if(n!=0)
return n+1;
else
return n;
}

返回值:n是索引值,返回值应该是data[n]。

而且这个函数书写最好修改一下。

许通 | 园豆:220 (菜鸟二级) | 2012-11-11 15:04
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册