51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 1158|回复: 4
打印 上一主题 下一主题

一道PAT1062 最简分数 测试用例运行超时

[复制链接]
  • TA的每日心情
    无聊
    4 天前
  • 签到天数: 530 天

    连续签到: 2 天

    [LV.9]测试副司令

    跳转到指定楼层
    1#
    发表于 2022-1-25 10:19:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    1测试积点

    [color=rgba(0, 0, 0, 0.75)]我的思路是:先通分,这里通分是把三个分母全部乘起来,然后会有一个分子的上界和下界。例如7/18 13/20 12 通分后有7/18=1680/4320 13/20=2808/4320 而对于任意的正整数x,都有x/12=360*x/4320。那么这个360x就要在1680和2808之间。那么x的最小值就是1680/360+1=5 最大值就是2808/360=7。在确定了上下界后,只要循环一次,看一下哪些是最简分数,输出即可
    [color=rgba(0, 0, 0, 0.75)]代码如下:

    1. import java.io.*;
    2. public class Main {
    3.     private int num1;

    4.     public Main(int num1){
    5.         this.num1=num1;
    6.     }

    7.     private boolean hasGCD(int num2){//求是否有除了1之外的公约数的方法
    8.         while(num1!=num2){
    9.             if(num1>num2) num1=num1-num2;
    10.             else num2=num2-num1;
    11.         }
    12.         if(num1!=1) return true;
    13.         else return false;
    14.     }

    15.     public static void main(String[] args) throws IOException {
    16.         BufferedReader br=new BufferedReader(new InputStreamReader(System.in));

    17.         String[] num=br.readLine().split(" ");
    18.         String[] N1M1=num[0].split("/");
    19.         String[] N2M2=num[1].split("/");

    20.         int N1=Integer.parseInt(N1M1[0]),M1=Integer.parseInt(N1M1[1]);
    21.         int N2=Integer.parseInt(N2M2[0]),M2=Integer.parseInt(N2M2[1]);
    22.         int K=Integer.parseInt(num[2]);

    23.         int min=N1*M2*K,max=N2*M1*K;//通分后分子的最小值最大值
    24.         int minK=min/(M1*M2)+1,maxK=max/(M1*M2);//约分后分子的最小值最大值

    25.         int temp;
    26.         if(minK>maxK){
    27.             temp=maxK;
    28.             maxK=minK;
    29.             minK=temp;
    30.         }//这一段是为了防止前一个分数比后面一个分数大的情况,刁钻的测试用例

    31.         String result="";
    32.         for(int i=minK;i<=maxK;i++){
    33.             if(!new Main(i).hasGCD(K)) result+=i+"/"+K+" ";//没有公约数就拼接上去,最后打印再去尾部空格
    34.         }

    35.         System.out.print(result.trim());
    36.     }
    37. }
    复制代码
    这段代码进去测试点2运行超时了,具体问题在哪里?


    附件: 您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    7 小时前
  • 签到天数: 669 天

    连续签到: 1 天

    [LV.9]测试副司令

    2#
    发表于 2022-1-26 09:16:39 | 只看该作者
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    6 小时前
  • 签到天数: 1522 天

    连续签到: 1 天

    [LV.Master]测试大本营

    3#
    发表于 2022-1-26 10:22:49 | 只看该作者
    下个断点看看
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2024-10-22 14:23
  • 签到天数: 1007 天

    连续签到: 1 天

    [LV.10]测试总司令

    4#
    发表于 2022-1-26 15:15:04 | 只看该作者
    这个只能让懂Java代码的同学帮着看看了...
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    9 小时前
  • 签到天数: 2819 天

    连续签到: 1 天

    [LV.Master]测试大本营

    5#
    发表于 2022-1-26 17:19:07 | 只看该作者
    先看结果是啥啊
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-25 16:32 , Processed in 0.063746 second(s), 22 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表