迅雷9.12 笔试

第一题,有正数A,和负数B,选m个A,n个B排成一排,使:m+n = 17 ,且任意相邻7个数和小于0,问这17个数的最大和是多少?

思路:找出7个数中至少需要几个B,然后按,A...A B...B A..A B...B A...A B...B 排列,取前17个,这样保证后三个尽可能使正数A。最后只过了88%,不知道漏掉了什么情况。【求大佬指点一下】

第二题:有 a a + bb = c*c ,且,a、b、c互质,求满足 0<a<b<c<=N的(a,b,c)有多少组

思路:a = jj - ii; b = 2ji; c = jj - ii; 则只有 j 和 i 满足互质且一个为奇数一个为偶数,则可得到一组满足题意的 a,b,c

//第一题
package com.zhudky;
import java.util.*;
public class Main {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            int A  = sc.nextInt();
            int B =  sc.nextInt();
            int AOfSeven = 7;
            while(AOfSeven>0){
                int temp = A*AOfSeven + B*(7-AOfSeven);
                if(temp<0){
                    break;
                }
                AOfSeven--;
            }
            int numOfA = 2*AOfSeven ;
            int numOfB =  2*(7-AOfSeven);
            int num = numOfA + numOfB;
            while(num<=17){
                int temp = Math.min(AOfSeven,17-num);
                if(temp>0){
                    num += temp;
                    numOfA+= temp;
                }
                else{
                    break;
                }
                temp = Math.min(7-AOfSeven,17-num);
                if(temp>0){
                    num += temp;
                    numOfB += temp;
                }
                else{
                    break;
                }
            }
            int re = A*numOfA + B*numOfB;
            System.out.println(re);
        }
}
//第二题
package com.zhudky;
import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        long N = sc.nextLong();
        int m = (int)Math.floor(Math.sqrt(N));
        int re =0;
        for (int i = 1; i < m+1; i++) {
            for (int j = i+1; j < m+1; j+=2) {
                //int a = j*j - i*i;
                //int b = 2*j*i;
                long c = j*j + i*i;
                if(c<=N && gcd(j,i)==1 ){
                    re++;
                }
                else if(c>N){
                    break;
                }
            }
        }
        System.out.println(re);
    }
    private static int gcd(int x,int y){
        return (x%y != 0) ? gcd(y,x%y):y;
    }
}
#迅雷##笔试题目##题解#
全部评论
有可能Ans比0小
点赞 回复
分享
发布于 2018-09-12 20:48
第一题暴力即可,复杂度O(17*2^17)
点赞 回复
分享
发布于 2018-09-12 20:57
小红书
校招火热招聘中
官网直投
public static void main(String[] args) { int[] a = new int[17]; Scanner in = new Scanner(System.in); int n = in.nextInt(), m = in.nextInt(); int sum = 7 * n, count = 0; while(sum >= 0){ //计算每7个相邻元素中至少需要几个负数才能相加小于0 sum = sum - n + m; count++; } //count < 5时,只需要考虑为头尾两个相邻对的负数个数 //count >= 5时,还需加上中间相邻对中三个元素中负数的个数。 if(count >= 5){ System.out.println((3 * count - 4) * m + (17 - (3 * count - 4)) * n); } else System.out.println(2 * count * m + (17 - 2 * count) * n); } 格式有点乱,将就看吧,17数的AC
点赞 回复
分享
发布于 2018-09-12 21:08
我也是过了88%,不知道为什么
点赞 回复
分享
发布于 2018-09-12 22:47
A是10,B是-1。你的num初始化实际上就是14嘛,这种情况下第二个while循环直接就退出了吧,取不到17个数。
点赞 回复
分享
发布于 2018-09-13 01:35
啊 扎心了 错过了笔试
点赞 回复
分享
发布于 2018-09-13 09:56

相关推荐

点赞 12 评论
分享
牛客网
牛客企业服务