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();
程序还有其他问题,帮忙看一下 展开
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();
程序还有其他问题,帮忙看一下 展开
1个回答
展开全部
我大概看了一下你的逻辑应该没错,但是浪费了很多时间,比如判断到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的题,还有问题可以私信
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询