携程笔试

两道题都是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 辽宁
好家伙 今天做的太烂了
3 回复 分享
发布于 2022-09-14 21:16 北京
第二题思路 矩阵位置设为0,1,2,3 如果两个矩阵不同的位置为0个,答案为0 如果两个矩阵不同的位置为4个,答案为2 如果两个矩阵不同的位置为2个, 当为0、3或者1、2时,答案为2, 其余情况答案为1
3 回复 分享
发布于 2022-09-14 21:15 辽宁
第三题问一下,我的想法是就是求red (max-min) 和blue (max-min)中的最大值,相当于两个窗口都可以滑动,必然一个包含另一个,所以较大size的窗口长度就是结果,但是只过了23%,各位大大有思路吗
2 回复 分享
发布于 2022-09-14 20:58 美国
得用scanner.hashnextInt()
2 回复 分享
发布于 2022-09-14 20:43 天津
算法的题属实整麻了
1 回复 分享
发布于 2022-09-14 21:03 陕西
第三题为啥会超时,真是完全想不明白错在哪里
1 回复 分享
发布于 2022-09-14 20:59 广东
ak了
1 回复 分享
发布于 2022-09-14 20:56 辽宁
你这个应该是输入一组用例,得出一个结果,一开始我这样写也报错
1 回复 分享
发布于 2022-09-14 20:52 贵州
卧槽,我还以为就我这样
点赞 回复 分享
发布于 2022-09-14 22:53 加拿大
第二题 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 21:14 湖南
1没做出来,2、3Accepted, 4先用int long解,大数会超时,然后改BigInteger, 没通过 什么水平?
点赞 回复 分享
发布于 2022-09-14 21:12 美国
有没有大佬知道最后一题用等差数列求和公式为啥只过了20
点赞 回复 分享
发布于 2022-09-14 21:11 甘肃
第四道该怎么做?1234放顶点是加2遍,最大的(n-2)*(n-2)个数放中间,加4遍,其余的放边缘,加3遍,这样不对吗?最后只能通过20%
点赞 回复 分享
发布于 2022-09-14 20:55 江苏
请问做出来了吗
点赞 回复 分享
发布于 2022-09-14 20:48 上海

相关推荐

06-27 12:54
已编辑
门头沟学院 Java
累了,讲讲我的大学经历吧,目前在家待业。我是一个二本院校软件工程专业。最开始选专业是觉得计算机感兴趣,所以选择了他。本人学习计算机是从大二暑假结束开始的,也就是大三开始。当时每天学习,我个人认为Java以及是我生活的一部分了,就这样持续学习了一年半,来到了大四上学期末,大概是在12月中旬,我终于找的到了一家上海中厂的实习,但我发现实习生的工作很枯燥,公司分配的活也不多,大多时间也是自己在自学。就这样我秋招末才找到实习。时间来到了3月中旬,公司说我可以转正,但是转正工资只有7000,不过很稳定,不加班,双休,因为要回学校参加答辩了,同时当时也是心高气傲,认为可以找到更好的,所以放弃了转正机会,回学校准备论文。准备论文期间就也没有投递简历。然后时间来到了5月中旬,这时春招基本也结束了,然后我开始投递简历,期间只是约到了几家下场面试。工资也只有6-7k,到现在我不知道该怎么办了。已经没有当初学习的心劲了,好累呀,但是又不知道该干什么去。在家就是打游戏,boss简历投一投。每天日重一次。26秋招都说是针对26届的人,25怎么办。我好绝望。要不要参加考公、考研、央国企这些的。有没有大佬可以帮帮我。为什么感觉别人找工作都是顺其自然的事情,我感觉自己每一步都在艰难追赶。八股文背了又忘背了又忘,我每次都花很长时间去理解他,可是现在感觉八股、项目都忘完了。真的已经没有力气再去学习了。图片是我的简历,有没有大哥可以指正一下,或者说我应该走哪条路,有点不想在找工作了。
码客明:太累了就休息一下兄弟,人生不会完蛋的
如果实习可以转正,你会不...
点赞 评论 收藏
分享
评论
2
13
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务