2019腾讯第三次笔试 第一题柠檬的选择

这次笔试说明我最好在学校再学学,学好了再去上班,不然去了就是辣鸡。。。
有误的地方欢迎指出和友善讨论,喷子请绕路。

第一题柠檬的选择

小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;
}

发布了140 篇原创文章 · 获赞 114 · 访问量 18万+

猜你喜欢

转载自blog.csdn.net/qinglingLS/article/details/101080961