• 迅雷2019秋招后台开发编程题题解


    红黑积木求和

    题目描述

    有红黑两种颜色的方块积木,红色代表正数A,黑色代表负数B。选出17块积木排成一排,使得任意相邻7块积木之和都小于0。如何挑选才能使17块积木之和最大,最大值是多少?

    输入

    正数A,负数B

    A和B绝对值小于10000

    输出

    积木之和的最大值

    样例输入

    10 -61
    

    样例输出

    28
    

    思路

    1. 17个木块可以分为7 7 3
    2. 找到和为负数的最多正数的情况
    3. 保证2的情况下,使最后的 3 个正数最多。

    代码实现

    package xunlei;
    
    import java.util.Scanner;
    
    /**
     * 有红黑两种颜色的方块积木,红色代表正数A,黑色代表负数B。选出17块积木排成一排,使得任意相邻7块积木之和都小于0。如何挑选才能使17块积木之和最大,最大值是多少?
     */
    public class Main {
    
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            int a = sc.nextInt();
            int b = sc.nextInt();
            int i;
            for (i = 1; i <= 7; i++) {
                if (b * i + a * (7 - i) < 0) {
                    break;
                }
            }
            int res;
            if ((7 - i) < 3) {
                res = (7 - i) * a + (3 - (7 - i)) * b + (b * i + a * (7 - i)) * 2;
            } else {
                res = 3 * a + (b * i + a * (7 - i)) * 2;
            }
            System.out.println(res);
        }
    }
    

    计算勾股数

    题目描述

    勾股数,是由三个正整数组成的数组;能符合勾股定理 a * a + b * b = c * c , (a, b, c) 的正整数解。如果 (a, b, c) 是勾股数,它们的正整数倍数,也是勾股数。如果 (a, b, c) 互质,它们就称为素勾股数。给定正整数N,计算出小于或等于N的素勾股数个数。(0 < a <= b <= c <= N)

    输入

    正整数N

    输出

    小于或等于N的素勾股数个数

    (0 < a <= b <= c <= N)

    样例输入

    10
    

    样例输出

    1
    

    思路

    勾股的另种写法是 a = m * m - n * n ,b = 2 * m * n, c = m * m + n * n ,那么a * a + b * b = c * c,那么只要保证m和n互质,并且m和n至少有一个是偶数,那么a,b,c的最大公因数是1,a,b,c互质。

    代码实现

    package xunlei;
    
    import java.util.Scanner;
    
    public class Main2 {
        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 res = 0;
            for (int i = 1; i < m + 1; i++) {
                for (int j = i + 1; j < m + 1; j += 2) {
                    long c = j * j + i * i;
                    if (c <= N && gcd(j, i) == 1) {
                        res++;
                    } else if (c > N) {
                        break;
                    }
                }
            }
            System.out.println(res);
        }
    
        private static int gcd(int x, int y) {
            return (x % y != 0) ? gcd(y, x % y) : y;
        }
    }
    
    
  • 相关阅读:
    Agile方法
    电子书下载:Beginning Nokia Apps Development: Using MeeGo, Mobile QT and OpenSymbian
    电子书下载:Pro Oracle SQL
    电子书下载:Algorithms of the Intelligent Web
    BlogEngine .NET 日期控件显示问题
    电子书下载:Beginning JavaScript, 4th Edition
    电子书下载:Sams Teach Yourself iPhone Application Development in 24 Hours, 2nd Edition
    电子书下载:Pro ASP.NET 4 in VB 2010, 3rd Edition
    电子书下载:MCTS SelfPaced Training Kit (Exam 70515): Web Applications Development with Microsoft .NET Framework 4
    电子书下载:Unity 3D Game Development by Example: Beginner’s Guide
  • 原文地址:https://www.cnblogs.com/wupeixuan/p/9640750.html
Copyright © 2020-2023  润新知