C++改错 : error C2297: '<<' : illegal, right operand has type
#include<iostream>#include<fstream>usingnamespacestd;//结构体用来保存众数的元素与重数typedefstruct{i...
#include<iostream>#include<fstream>
using namespace std ;
//结构体用来保存众数的元素与重数typedef struct
{
int element; //元素
int sum; //重数
}zhongshu;
//记录中位数的起始下标typedef struct
{
int low;
int high;
}node;
//快排zhongshu x ;
void sort( int a[] , int s , int t )//对a[s]到a[t]的元素排序 {
int i = s , j = t ;
int temp ;
if( s < t )
{
temp = a[s] ;
while( i != j )
{
while( j > i && a[j] > temp )
j-- ;
if( i < j ) //表示找到a[j],则a[i],a[j]交换
{
a[i] = a[j] ;
i++ ;
}
while( i < j && a[i] < temp )
i++ ; //从左向右扫描,找到第一个大于temp的a[i]
if( i < j ) //表示找到a[i],则a[i],a[j]交换
{
a[j] = a[i] ;
j-- ;
}
}
a[i] = temp ;
sort( a , s , i - 1 ) ; //对左递归
sort( a , i + 1 , t ) ; //对右递归
}
}
int madian( int *a , int L , int R )
{
int num = L + R + 1 ;
return a[num/2] ;
}
//返回中位数的起始点node spalit(int *a , int med , int L , int R )
{
node m ;
m.low = L ;
m.high = R ;
for( int i = 0 ; i <= R ; i++ )
{
if( med == a[i] )
{
m.low = i ;
break ;
}
}
for( int j = R ; j >= 0 ; j-- )
{
if( med == a[j] )
{
m.high = j ;
break ;
}
}
return m ;
}
//众数的重数求取
void mode( int *a , int L , int R )
{
if( L >= R )
return;//x.sum=0;
else
{
node n;
int temp = 0 ;
int med ;
med = madian( a , L , R ) ;
n = spalit( a , med , L , R );
temp = n.high - n.low + 1 ;
if( x.sum < temp )
{
x.element = med ;
x.sum = temp ;
}
if( n.low - L > temp )//
{
if( x.sum < temp )
{
x.element = med ;
x.sum = temp ;
}
mode(a , L , n.low - 1 ) ;
}
if( R - n.high > temp )
{
if( x.sum < temp )
{
x.element = med ;
x.sum=temp;
}
mode( a , n.high + 1 , R ) ;
}
}
}
int main()
{
x.sum = 0 ;
int n ;
int *a ;
ifstream fin("input.txt");
if( !infile )
{
cout<<"the file can't open!"<<endl;
return - 1 ;
}
fin >> n ;
a = new int[n];
for( int i = 0 ; i < n ; i++)
{
fin >> a[i] ;
}
sort(a,0,n-1);
mode(a,0,n-1);
fout << x.element <<" " << x.sum;
delete []a;
return 0 ;
}
主要改主函数文件输入输出部分,有错 展开
using namespace std ;
//结构体用来保存众数的元素与重数typedef struct
{
int element; //元素
int sum; //重数
}zhongshu;
//记录中位数的起始下标typedef struct
{
int low;
int high;
}node;
//快排zhongshu x ;
void sort( int a[] , int s , int t )//对a[s]到a[t]的元素排序 {
int i = s , j = t ;
int temp ;
if( s < t )
{
temp = a[s] ;
while( i != j )
{
while( j > i && a[j] > temp )
j-- ;
if( i < j ) //表示找到a[j],则a[i],a[j]交换
{
a[i] = a[j] ;
i++ ;
}
while( i < j && a[i] < temp )
i++ ; //从左向右扫描,找到第一个大于temp的a[i]
if( i < j ) //表示找到a[i],则a[i],a[j]交换
{
a[j] = a[i] ;
j-- ;
}
}
a[i] = temp ;
sort( a , s , i - 1 ) ; //对左递归
sort( a , i + 1 , t ) ; //对右递归
}
}
int madian( int *a , int L , int R )
{
int num = L + R + 1 ;
return a[num/2] ;
}
//返回中位数的起始点node spalit(int *a , int med , int L , int R )
{
node m ;
m.low = L ;
m.high = R ;
for( int i = 0 ; i <= R ; i++ )
{
if( med == a[i] )
{
m.low = i ;
break ;
}
}
for( int j = R ; j >= 0 ; j-- )
{
if( med == a[j] )
{
m.high = j ;
break ;
}
}
return m ;
}
//众数的重数求取
void mode( int *a , int L , int R )
{
if( L >= R )
return;//x.sum=0;
else
{
node n;
int temp = 0 ;
int med ;
med = madian( a , L , R ) ;
n = spalit( a , med , L , R );
temp = n.high - n.low + 1 ;
if( x.sum < temp )
{
x.element = med ;
x.sum = temp ;
}
if( n.low - L > temp )//
{
if( x.sum < temp )
{
x.element = med ;
x.sum = temp ;
}
mode(a , L , n.low - 1 ) ;
}
if( R - n.high > temp )
{
if( x.sum < temp )
{
x.element = med ;
x.sum=temp;
}
mode( a , n.high + 1 , R ) ;
}
}
}
int main()
{
x.sum = 0 ;
int n ;
int *a ;
ifstream fin("input.txt");
if( !infile )
{
cout<<"the file can't open!"<<endl;
return - 1 ;
}
fin >> n ;
a = new int[n];
for( int i = 0 ; i < n ; i++)
{
fin >> a[i] ;
}
sort(a,0,n-1);
mode(a,0,n-1);
fout << x.element <<" " << x.sum;
delete []a;
return 0 ;
}
主要改主函数文件输入输出部分,有错 展开
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询