编程语言
首页 > 编程语言> > PAT乙级1103 java 最后一个测试点

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