华为OD机试题,本地跑没问题,平台上一个用例都不过

比较郁闷,一个用例都没过,题目没拷贝下来,大意如下,样例是准确的

如果一个整数可以分解成两个质数的和,求有这样的质数的组数,比如18可以分解成7+11、5+13,即两组。

支持一次输入多行,以0结束输入,输出以"end"字符串结束,下面是样例
输入:
2
5
10
18
0
输出:
0
1
2
2
end

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNextLine()) {
            int num = in.nextInt();
            List<Integer> l = new ArrayList<>();
            while (num != 0) {
                l.add(num);
                num = in.nextInt();
            }
            in.nextLine();

            for (Integer n : l) {
                int ret = 0;
                for (int i = 2; i <= n / 2; i++) {
                    int j = n - i;
                    if (isZhiShu(i) && isZhiShu(j)) {
                        ret++;
                    }
                }
                System.out.println(ret);
            }
            System.out.println("end");
        }
        in.close();
    }

    private static boolean isZhiShu(int num) {
        for (int i = 2; i <= num / 2; i++) {
            if (num % i == 0) {
                return false;
            }
        }
        return true;
    }
}


#LINE##笔试题目#
全部评论
我当时也是这个题, 我用python写的.100%通过了
2 回复
分享
发布于 2020-05-01 20:17
您好   你的代码中:第19行对质数的赛选是不正确的,不能直接i/2;你可以列举10试一试; 建议用HashMap,将质数对中较小的最为key 较大的作为value 这样就可以解决了
2 回复
分享
发布于 2020-05-29 00:18
滴滴
校招火热招聘中
官网直投
是不是和in.hasNextLine有关 https://www.nowcoder.com/discuss/8050
1 回复
分享
发布于 2020-05-01 20:48
 while (!scanner.hasNext ("0")){            list.add ( scanner.nextInt () );         },循环部分用这个可能比较好一点
1 回复
分享
发布于 2020-07-01 04:06
public class test {     public static void main(String[] args) {         Scanner in = new Scanner(System.in);         int next=in.nextInt();         int count=0;         for(int i=2;i<=next/2;i++) {          int rest=next-i;          if(isZhiShu(rest)&&isZhiShu(i)) {          count++;          }         }         System.out.println(count);     }       private static boolean isZhiShu(int num) {      boolean flag=true;         for (int i = 2; i <= num / 2; i++) {             if (num % i == 0) {                 flag=false;             }         }         return flag;     } }
点赞 回复
分享
发布于 2020-03-11 17:37
和我面到的一样,我用python写的过了
点赞 回复
分享
发布于 2020-03-11 19:54
你判断是否为质数的方法就有问题吧
点赞 回复
分享
发布于 2020-04-23 21:19
public static void main(String[] args) {         Scanner in = new Scanner(System.in);         while (in.hasNext()) {             int count = 0;             int num = in.nextInt();             if (num == 0) {                 System.out.println("end");                 break;             } else {                 for (int i = 2; i <= num / 2; i++) {                     if (isZhiShu(i) && isZhiShu(num - i)) {                         count++;                     }                 }                 System.out.println(count);             }         }         in.close();     }     private static boolean isZhiShu(int num) {         boolean flag = true;         for (int i = 2; i <= num / 2; i++) {             if (num % i == 0) {                 flag = false;             }         }         return flag;     }
点赞 回复
分享
发布于 2020-05-01 16:39
好像没啥问题
点赞 回复
分享
发布于 2020-05-01 16:58
请问 OD招聘这个机试在哪里考呢?华为公司里面吗?
点赞 回复
分享
发布于 2020-05-03 11:25
应该是你的scanner一直是跑着的,.close()根本跑不到,你把break加到system.out.print("end")后面应该就可了
点赞 回复
分享
发布于 2020-09-11 17:12
牛客机试有时候是会有这样的问题,我也遇到很多次了,本地一切正常,提交上去的就不行
点赞 回复
分享
发布于 2020-09-17 23:11
public class demo1 {     public static void main(String[] args) {         Scanner scanner = new Scanner(System.in);         while (scanner.hasNext()) {             int num = scanner.nextInt();             if (num == 0) {                 System.out.println("end");                 return;             }             //num可以拆为多少组质数相加             //eg:18  7+11   5+13             //优化,直接通过减法             int count = 0;             for (int i = 2; i<= num /2 ;i++) {                 int target = num - i;                 if (isPrime(target) && isPrime(i)) {                     count++;                 }             }             System.out.println(count);         }     }     private static boolean isPrime(int num) {         for (int i = 2; i <= Math.sqrt(num) ; i++) {             if (num%i == 0) {                 return false;             }         }         return true;     } }
点赞 回复
分享
发布于 2021-04-03 10:05
时间复杂度太大了,你运算999999试试,估计就是超时了 1、这里可以换成i*i<num 优化     private static boolean isZhiShu(int num) {         for (int i = 2; i <= num / 2; i++) {             if (num % i == 0) {                 return false;             }         }         return true;     } 2、这里可以运用双指针的方式优化(先取出质数列表【这里还可以加个缓存】,然后用双指针计算)  int ret = 0;                 for (int i = 2; i <= n / 2; i++) {                     int j = n - i;                     if (isZhiShu(i) && isZhiShu(j)) {                         ret++;                     }                 }
点赞 回复
分享
发布于 2021-04-05 22:17

相关推荐

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