题目
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;
}
求正解与错解得不同,错解是错在哪里?呜呜
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]。
而且这个函数书写最好修改一下。