牛客编程巅峰赛S2第9场 - 青铜&白银&黄金 题解

本文介绍了两道牛客网的算法题目,包括寻找大于a且为b的倍数的最小整数问题,以及从一组数中找出能组成最大和最小三角形周长的算法。第一题通过除法和乘法操作即可求解,第二题利用排序和双指针技术高效求解。这些问题展示了数学在算法中的应用和搜索优化技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

A 牛牛找数

链接:https://ac.nowcoder.com/acm/contest/10197/A
来源:牛客网

牛牛有两个数a和b,他想找到一个大于a且为b的倍数的最小整数,只不过他算数没学好,不知道该怎么做,现在他想请你帮忙。
给定两个数a和b,返回大于a且为b的倍数的最小整数。

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 给定两个数a和b,返回大于a且为b的倍数的最小整数。​
     * @param a int整型 代表题目中描述的a
     * @param b int整型 代表题目中描述的b
     * @return int整型
     */
    public int solve (int a, int b) {
        // write code here
        int num=a/b;
        return (num+1)*b;
    }
}

B 牛牛与三角形

链接:https://ac.nowcoder.com/acm/contest/10197/B
来源:牛客网

牛牛想从n个数中找出三个数来组成一个三角形,只不过牛牛想知道在所有的三角形的组成中,周长最大的三角形的周长减去周长最小的三角形的周长是多少?
牛牛不能够解决该问题,所以他想请你帮忙,给定n个数,返回在所有合法的三角形的组成中,周长最大的三角形的周长减去周长最小的三角形的周长的值。
题目保证每组测试数据中都存在有三个数可以构成三角形,保证答案在int范围内。

这题 n数据量是1000 n3暴力枚举肯定不行。
考虑n2枚举
因为要想组成周长最小的三角形,我们把所有边从小到大排序。要想组成三角形,就得前两边之和大于第三条边,所以取个最小的就行,因为之后的一定更不合适。
看有些题解还二分,麻烦了。

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 返回在所有合法的三角形的组成中,最大的三角形的周长减去最小的三角形的周长的值
     * @param n int整型 代表题目中的n
     * @param a int整型vector 代表n个数的大小
     * @return int整型
     */
    int solve(int n, vector<int>& a) {
        // write code here
        sort(a.begin(),a.end());
        //先确定最小的
        int minn=0x3f3f3f3f;
        int maxx=0;
        for(int i=0;i<n-2;i++){
            for(int j=i+1;j<n-1;j++){
                if(a[j+1]<a[i]+a[j]){
                    if(minn>a[i]+a[j]+a[j+1]){
                        minn=a[i]+a[j]+a[j+1];
                    }
                }
            }
        }
        for(int i=n-1;i>1;i--){
            for(int j=n-2;j>0;j--){
                if(a[j-1]+a[j]>a[i]){
                    if(maxx<a[j-1]+a[j]+a[i]){
                        maxx=a[j-1]+a[j]+a[i];
                    }
                }
            }
        }
        return maxx-minn;
    }
};

链接:https://ac.nowcoder.com/acm/contest/10197/C
来源:牛客网

牛牛有一个长和高都为为\mathit nn的网格三角形,牛牛想从从左下角点走到右上角点,但是牛牛只能向上或者向右沿着网格的边走,牛牛想知道从左下角点走到右上角点的方案数的奇偶性。牛牛现在给你\mathit nn,请你告诉牛牛路径方案数的奇偶性,若是奇数返回true,若是偶数返回false。

发现当n是2的幂次-1,即二进制表示下全为1时,为true
用java大数就行,不必读入。

import java.util.Scanner;
import java.math.BigInteger;

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 
     * @param n string字符串 三角形的长和高
     * @return bool布尔型
     */
    public boolean judge (String n) {
        //Scanner sc=new Scanner(System.in);
		//n=sc.next();
		//int len=n.length();
		//n=n.substring(1,len-2);
		BigInteger a=new BigInteger(n);
		if(a.and(a.add(BigInteger.ONE)).equals(BigInteger.ZERO))
            return true;
        return false;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值