这次笔试说明我最好在学校再学学,学好了再去上班,不然去了就是辣鸡。。。
有误的地方欢迎指出和友善讨论,喷子请绕路。
第一题柠檬的选择
小Q的面前有两排柠檬,
我们称两排柠檬分别为A,B。A排有n个柠檬,B排有M个柠檬。
这里思路:
n<=2的时候,列举即可。
n>=3的时候
首先最大的会可能被拿走,那就是第二大的作为最大咯。
所以我们得出A的最大,次大,次小,最小。B的最大,最小。
根据一些逻辑推导。
我们把上面的4个A里的数字和2个B里的数字进行排列组合,
得到8个结果。
这八个结果按照大小排序,得到最大和次大,我们知道,最大里面一定是:
a的最大*
B的最大或者是A的最小*
B的最小得到的结果,
所以把上面8个数字排序,排除掉最大后,剩下的第二大的数字就是我们要求的数字。
输出这个数字即可。
核心代码:
int A1[4]= {maxA,maxA2,minA2,minA};
int B2[2]= {maxB,minB};
for(i=0; i<4; i++)
{
for(j=0; j<2; j++)
{
result[i*2+j]=A1[i]*B2[j];
//printf(" %d, ",result[i*2+j]);
if(max<result[i*2+j])
{
lessmax=max;
max=result[i*2+j];
indexxx=i*2+j;
}
if(indexxx!=i*2+j&&lessmax<result[i*2+j])//第一大和第二大不是一个值,而且满足条件。
{
lessmax=result[i*2+j];
}
}
}
#include <stdio.h>
#include <stdlib.h>
int main()
{
int m,n;
int A[4000]= {0};
int B[4000]= {0};
scanf("%d %d",&n,&m);
int i=0;
int maxA=-100000;
int indexA=0;
int maxA2=-100000;
int minA=100000;
int indexminA=0;
int minA2=100000;
int maxB=-100000;
int minB=100000;
for(i=0; i<n; i++)
{
scanf("%d",&A[i]);
if(maxA<A[i])
{
indexA=i;
maxA2=maxA;
maxA=A[i];
}
if(indexA!=i&&maxA2<A[i])//第一大和第二大不是一个值,而且满足条件。
{
maxA2=A[i];
}
if(minA>A[i])
{
minA2=minA;
minA=A[i];
}
if(indexminA!=i&&minA2>A[i])
{
minA2=A[i];
}
}
for(i=0; i<m; i++)
{
scanf("%d",&B[i]);
if(maxB<B[i])
{
maxB=B[i];
}
if(minB>B[i])
{
minB=B[i];
}
}
if(n==2) //这个情况就不用比较次大次小了,直接给出第二大就行
{
int result[4]= {0};
int lessmax=-100000;
int max=-100000;
int j=0;
int indexxx=0;
int A1[2]= {maxA,minA};
int B2[2]= {maxB,minB};
for(i=0; i<2; i++)
{
for(j=0; j<2; j++)
{
result[i*2+j]=A1[i]*B2[j];
//printf(" %d, ",result[i*2+j]);
if(max<result[i*2+j])
{
lessmax=max;
max=result[i*2+j];
indexxx=i*2+j;
}
if(indexxx!=i*2+j&&lessmax<result[i*2+j])//第一大和第二大不是一个值,而且满足条件。
{
lessmax=result[i*2+j];
}
}
}
printf("%d",lessmax);
}
else
{
//比较最大和最大,最小和最小的乘积
//拿走了最大,
int result[8]= {0};
int lessmax=-100000;
int max=-100000;
int j=0;
int indexxx=0;
int A1[4]= {maxA,maxA2,minA2,minA};
int B2[2]= {maxB,minB};
for(i=0; i<4; i++)
{
for(j=0; j<2; j++)
{
result[i*2+j]=A1[i]*B2[j];
//printf(" %d, ",result[i*2+j]);
if(max<result[i*2+j])
{
lessmax=max;
max=result[i*2+j];
indexxx=i*2+j;
}
if(indexxx!=i*2+j&&lessmax<result[i*2+j])//第一大和第二大不是一个值,而且满足条件。
{
lessmax=result[i*2+j];
}
}
}
printf("%d",lessmax);
}
return 0;
}