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

32 篇文章 0 订阅
24 篇文章 1 订阅

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

第一题柠檬的选择

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值