题目:
代码:
(70分代码)
这个代码有逻辑问题,所以只能拿到70分。因为从中间只判断相邻的两个元素是远远不够的,只满足特定的情况,不具有普遍性。
#include<stdio.h>
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int n;
scanf("%d",&n);
int num[1500];
for(int i=0;i<n;i++)
{
scanf("%d",&num[i]);
}
sort(num,num+n);
if(n%2==0)
{
if(num[n/2]==num[n/2-1])
{
printf("%d",num[n/2]);
}
else
printf("-1");
}
else if(n%2!=0)
{
if(num[n/2]==num[n/2+1]&&num[n/2]!=num[n/2-1])
{
printf("%d",num[n/2]);
}
else
printf("-1");
}
return 0;
}
下面上暴力法:
#include<bits/stdc++.h>
//本道题要注意每一个数字的最大最小值之后要进行归零
int main()
{
int n,count_max=0,count_min=0;
int num[1005],b;
int mid,flag=0,result=0;
int max[1005],min[1005];
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d",&num[i]);
}
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
if(num[j]>num[i])
{
count_max+=1;
}
else if(num[j]<num[i])
{
count_min+=1;
}
}
max[i]=count_max;
min[i]=count_min;
count_max=0;//归零
count_min=0;
}
for(int i=0;i<n;i++)
{
if(max[i]==min[i])
{
flag=1;
b=i;
}
}
if(flag==1)
{
printf("%d",num[b]);
}
else if(flag==0)
{
printf("-1");
}
return 0;
}
在改进:
#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
int num[1500];
for(int i=0;i<n;i++)
{
scanf("%d",&num[i]);
}
int count_max=0,count_min=0;
int flag=0;
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
if(num[j]>num[i])
{
count_max+=1;
}
else if(num[j]<num[i])
{
count_min+=1;
}
}
if(count_max==count_min)
{
printf("%d",num[i]);
flag=1;
break;
}
count_max=0;
count_min=0;
}
if(flag==0)
{
printf("-1");
}
return 0;
}
|