PAT乙级1103 java 最后一个测试点
作者:互联网
import java.util.*;
public class Main {
//判断是否是完全平方数的方法
public static boolean isSquare(int n){
int root=(int)Math.sqrt(n);
if(root*root==n){
return true;
}
return false;
}
//求算数平方根
public static int root(int n){
return (int)Math.sqrt(n);
}
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int m= scan.nextInt(),n= scan.nextInt();
int count=0;//计数器,每找到一组解就自增,如果最后还是0说明无解
//遍历从m到n的每一个数,如果他有缘分数,就打出来
for(int i=m;i<=n;i++){
int differ=i*i*i-(i-1)*(i-1)*(i-1),c;
if(isSquare(differ)) c=root(differ);
else continue;//不是完全平方数就跳过
//遍历不从0开始,因为题目里说了是要正整数,所以从1开始到c的算数平方根为止,判断是否有这样的j满足条件
for(int j=2;j<=root(c);j++){
if(c==j*j+(j-1)*(j-1)){
System.out.println(i+" "+j);
count++;
}
}
}
if(count==0){
System.out.println("No Solution");
}
}
}
这里的最后一个测试用例有点刁钻,在写的时候已经想到了1 1到底算不算缘分数,但是看了题目描述之后 1^3-(1-1)^3=(1)^2 1^2=1^2+(1-0)^2 而在题目描述中两个作为“小弟”的(1-1)并没有要求为正整数,所以1 1应该算一组缘分数。但最后一个测试点还是爆了,把遍历的起点改成2就AC了,说明题目作者并不认为1 1算是一组解。应该是题目描述不够准确
标签:java,测试点,scan,int,static,1103,return,root,public 来源: https://blog.csdn.net/lyh20021209/article/details/122751004