acm题 java编写 老是wrong answer,求指教。另外能说一点ACM中java的注意事项么

importjava.util.Scanner;publicclassMain{publicstaticvoidmain(String[]args){Scannercin... import java.util.Scanner;
public class Main {

public static void main(String[] args){
Scanner cin = new Scanner(System.in);
int a,b,j,k1,k2,m;
int x=1;
while(0!=x){

int n = cin.nextInt();
if(n==0)
break;

m=0;

for(a=2;a<(n/2);a++){
k1=0;
k2=0;
b=n-a;
for(j=2;j<=Math.sqrt(a);j++){

if(a%j==0){
k1=1;

}
}

for(j=2;j<=Math.sqrt(b);j++){
if(b%j==0){
k2=1;
}
}

if((k1==0) && (k2==0)){
m++;
}
}
System.out.println(m);
}

input.close();
}

}
最后是cin.close();
程序还有其他问题,帮忙看一下
展开
 我来答
coding4love
2015-11-23 · 超过10用户采纳过TA的回答
知道答主
回答量:27
采纳率:0%
帮助的人:19.8万
展开全部

我大概看了一下你的逻辑应该没错,但是浪费了很多时间,比如判断到a%j==0就可以break了,后面没必要算,再比如拆分的第一个数如果不是素数,第二个就不用算了

给个改过的代码:

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner cin = new Scanner(System.in);
        int a, b, j, m;
        while (true) {
            int n = cin.nextInt();
            if (n == 0) {
                break;
            }
            m = 0;
            for (a = 2; a < (n / 2); a++) {
                b = n - a;
                double x = Math.sqrt(a);
                double y = Math.sqrt(b);
                for (j = 2; j <= x; j++) {
                    if (a % j == 0) {
                        break;
                    }
                }
                if (j <= x) {
                    continue;
                }
                for (j = 2; j <= y; j++) {
                    if (b % j == 0) {
                        break;
                    }
                }
                if (j <= y) {
                    continue;
                }
                m++;
            }
            System.out.println(m);
        }
        cin.close();
    }
}

我以前也做过一些acm的题,还有问题可以私信

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式