携程笔试

两道题都是while中的scanner.nextint出现这个bug,有人遇到一样的吗,我服了
感谢评论区大佬,做这么多陪跑笔试,第一次遇到这样的,好像是while里面在用nextInt() 得先用hasNextInt()做个判断就不会出这个错误了。
因为被这玩意浪费了差不多30 40分钟,最后结果1 0.05 1 0
斗胆贴一贴写的屎山,也希望各位大佬贴一贴第二题和第四题大家一起讨论讨论
ppO9ViFHVJo9TxIMVIJlkBLPhMrzlpo7.jpg


第一题
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int n = scan.nextInt();
        int k = scan.nextInt();
        int a=0,b=0;
        if(k%2==1){
            a=k/2;
            b=k/2+1;
        }else{
            a=k/2;
            b=k/2;
        }
        int nums = (a+1)*(b+1);
        float ans = n*n/(float)nums;
        System.out.println(String.format("%.2f",ans));
    }
}

第三题:举例出所有可能的情况。
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int T = scan.nextInt();
        scan.nextLine();
        while(T>=0){
            T--;
            if(scan.hasNextInt()){
                int n = scan.nextInt();
                int[] nums = new int[n];
                for (int i = 0; i < n; i++) {
                    nums[i] = scan.nextInt();
                }
                scan.nextLine();
                char[] strs = scan.nextLine().toCharArray();
                //分别是数组中红的最小最大值和蓝的最小最大值
                int r_min = Integer.MAX_VALUE;
                int r_max = Integer.MIN_VALUE;
                int b_min = Integer.MAX_VALUE;
                int b_max = Integer.MIN_VALUE;
                for (int i = 0; i < n; i++) {
                    if(strs[i]=='R'){
                        r_min = Math.min(nums[i],r_min);
                        r_max = Math.max(nums[i],r_max);
                    }
                    if(strs[i]=='B'){
                        b_min = Math.min(nums[i],b_min);
                        b_max = Math.max(nums[i],b_max);
                    }
                }
                if(r_min<=b_min&&r_max>=b_max){
                    System.out.println(r_max-r_min);
                    continue;
                }
                if(b_min<=r_min&&b_max>=r_max){
                    System.out.println(b_max-b_min);
                    continue;
                }
                if(r_min<=b_min&&b_max>=r_max){
                    if(b_max-r_max<b_min-r_min){
                        System.out.println(b_max-(r_min+b_max-r_max));

                    }else{
                        System.out.println(b_max-(r_min+b_min-r_min));
                    }
                    continue;
                }
                if(b_min<=r_min&&b_max<=r_max){
                    System.out.println(r_max-b_min);
                    continue;
                }
            }
        }
    }
}


#携程笔试#
全部评论
好难啊 各位感觉怎么样啊
8 回复 分享
发布于 2022-09-14 20:54 安徽
第二题我自己测都没问题 就是一直为0 我***了
5 回复 分享
发布于 2022-09-14 20:50 重庆
第四题思路  1,2,3,4只用计算2次 5到 4n-4 需要计算三次 4n-4+1到 n*n 需要计算4次 用等差数列求和 设求l,r 则(r-l+1)*(l+r)/2 我们假设为a*b/2 a和b都是1e9的,需要用大整数相乘 算法如下 long long qmul(long long a, long long b, long long mod) {     long long res = 0;     while (b) {         if (b & 1) res = (res + a) % mod;         (a <<= 1) %= mod;         b >>= 1;     }     return res; } 除以2等价于乘以2的逆元 求逆元算法如下 ll qmi(ll a, ll b, ll mod){     ll res = 1;     while(b){         if(b & 1) res = res * a % mod;         a = a * a % mod;         b >>= 1;     }     return res; } ll fermat(ll a, ll mod){     return qmi(a, mod - 2, mod); }
4 回复 分享
发布于 2022-09-14 21:15 辽宁
第二题思路 矩阵位置设为0,1,2,3 如果两个矩阵不同的位置为0个,答案为0 如果两个矩阵不同的位置为4个,答案为2 如果两个矩阵不同的位置为2个, 当为0、3或者1、2时,答案为2, 其余情况答案为1
3 回复 分享
发布于 2022-09-14 21:15 辽宁
好家伙 今天做的太烂了
3 回复 分享
发布于 2022-09-14 21:16 北京
得用scanner.hashnextInt()
2 回复 分享
发布于 2022-09-14 20:43 天津
第三题问一下,我的想法是就是求red (max-min) 和blue (max-min)中的最大值,相当于两个窗口都可以滑动,必然一个包含另一个,所以较大size的窗口长度就是结果,但是只过了23%,各位大大有思路吗
2 回复 分享
发布于 2022-09-14 20:58 美国
你这个应该是输入一组用例,得出一个结果,一开始我这样写也报错
1 回复 分享
发布于 2022-09-14 20:52 贵州
ak了
1 回复 分享
发布于 2022-09-14 20:56 辽宁
第三题为啥会超时,真是完全想不明白错在哪里
1 回复 分享
发布于 2022-09-14 20:59 广东
算法的题属实整麻了
1 回复 分享
发布于 2022-09-14 21:03 陕西
请问做出来了吗
点赞 回复 分享
发布于 2022-09-14 20:48 上海
第四道该怎么做?1234放顶点是加2遍,最大的(n-2)*(n-2)个数放中间,加4遍,其余的放边缘,加3遍,这样不对吗?最后只能通过20%
点赞 回复 分享
发布于 2022-09-14 20:55 江苏
有没有大佬知道最后一题用等差数列求和公式为啥只过了20
点赞 回复 分享
发布于 2022-09-14 21:11 甘肃
1没做出来,2、3Accepted, 4先用int long解,大数会超时,然后改BigInteger, 没通过 什么水平?
点赞 回复 分享
发布于 2022-09-14 21:12 美国
膜拜大佬,今晚的题不会只有我一个觉得好难吧,凉透
点赞 回复 分享
发布于 2022-09-14 21:14 湖南
第二题 LinkedList<int[]> listA = new LinkedList<>();             LinkedList<int[]> listB = new LinkedList<>();                for(int j=0;j<2;j++){                 for(int k=0;k<2;k++){                     if(a[j][k]!=b[j][k]){                         if(a[j][k]==1){                             listA.add(new int[]{j,k});                         }                         if(b[j][k]==1){                             listB.add(new int[]{j,k});                         }                     }                                 }             }                          for(int j=0;j<listA.size();j++){                 res[i] += (Math.abs(listA.get(j)[0]-listB.get(j)[0]) + Math.abs(listB.get(j)[1]-listB.get(j)[1]) );             }
点赞 回复 分享
发布于 2022-09-14 21:22 浙江
卧槽,我还以为就我这样
点赞 回复 分享
发布于 2022-09-14 22:53 加拿大

相关推荐

点赞 评论 收藏
分享
2 13 评论
分享
牛客网
牛客企业服务