这道题做的我很心累,既要考虑时间问题,又要考虑不能太过复杂,于是我用了这种方法,主要是max的赋值不好确定,并且min的值也不好确定,因为后面需要比较,于是我开了一个数组存储那些挑选出来的值,然后在将第一个值赋给max,这样就不会出现问题,但是我的求最值函数写的过于复杂,看到有人写成了这个样子,也是很佩服。
int max(int a,int b,int c){
int t;
t=a>b?a:b;
t=t>c?t:c;
return t;
}
int min(int a,int b,int c){
int t;
t=a<b?a:b;
t=t<c?t:c;
return t;
}
当然还有更简洁的代码,但是可读性上这个略胜一筹,更简洁的如下
//这种是宏定义的形式,还有其实是这种改编而来的,是很简洁,但是还是不太好理解,第一次估计写不出来这样的代码。
#define max(n1,n2,n3) a>(b>c?b:c)?a:(b>c?b:c)
#define min(n1,n2,n3) a>(b>c?c:b)?(b>c?b:c):a
不说了,贴代码。
> 描述
Yougth讲课的时候考察了一下求三个数最大值这个问题,没想到大家掌握的这么烂,幸好在他的帮助下大家算是解决了这个问题,但是问题又来了。
他想在一组数中找一个数,这个数可以不是这组数中的最大的,但是要是相对比较大的,但是满足这个条件的数太多了,怎么办呢?他想到了一个办法,把这一组数从开始把每相邻三个数分成一组(组数是从1开始),奇数组的求最大值,偶数组的求最小值,然后找出这些值中的最大值。
输入
有多组测试数据,以文件结束符为标志。
每组测试数据首先一个N,是数组中数的个数。(0<N<10000,为降低题目难度,N是3的倍数)
然后是数组中的这些数。
输出
输出包括一行,就是其中的最大值。
样例输入
3
4 5 6
6
1 2 3 7 9 5
样例输出
6
5
#include<iostream>
using namespace std;
int max(int n1,int n2,int n3){
int temp;
if(n1>n2){
temp=n1;
n1=n2;
n2=temp;
}
if(n1>n3){
temp=n1;
n1=n3;
n3=temp;
}
if(n2>n3){
temp=n2;
n2=n3;
n3=temp;
}
return n3;
}
int min(int n1,int n2,int n3){
int temp;
if(n1>n2){
temp=n1;
n1=n2;
n2=temp;
}
if(n1>n3){
temp=n1;
n1=n3;
n3=temp;
}
if(n2>n3){
temp=n2;
n2=n3;
n3=temp;
}
return n1;
}
int main(){
int num;
while(cin>>num){
int top=0;
int n1,n2,n3;
int book[10000];
int i=0;
while(num){
cin>>n1>>n2>>n3;
num-=3;
top+=3;
if(top/3%2!=0){
book[i++]=max(n1,n2,n3);
}
else{
book[i++]=min(n1,n2,n3);
}
}
int max=book[0];
for(int j=0;j<i;j++){
if(book[j]>max)max=book[j];
}
cout<<max<<endl;
}
return 0;
}