Kkai


私信TA

用户名:1145531885

访问量:1374

签 名:

等  级
排  名 45442
经  验 284
参赛次数 0
文章发表 2
年  龄 0
在职情况 学生
学  校 黄河科技学院
专  业

  自我简介:

解题思路:

首先我们要了解,当num能被a和b组合出来时,只有三种情况:

(1)num%a==0

(2)  num%b==0

(3)  num = n*a + m*b  , (n,m = 1,2..........n)

只要弄清这三种原因就好办了,我们可以写一个函数check来判断num是否可以被组合,然后用循环来倒序查找,因为我们知道不能被组合的最大数不可能超过a*b,所以我们可以从a*b开始来递减查找,第一次查出来的就是最大的无法组合数。


注意事项:
当判断第三种条件时,可以让n不断减去一个数b,每减一次就判断n%a是否为零。

import java.util.Scanner;
public class 买不到的数目 {
 
 //判断数n是否可以被a, b组合
 public static boolean Check(int n, int a, int b){
  //当n为a或b的倍数
  if(n%a==0 || n%b==0)
   return true;
  while(n>=a)
   if(n%a==0)
    return true;
   n=n-b; //这一步必须在判断之后,不然核能会出现n<0的情况
  }
  return false;
 }
 public static void test1(){
  Scanner scan = new Scanner(System.in);
  int a = scan.nextInt();
  int b = scan.nextInt();
  if(a>b){
   int temp = a;
   a=b;
   b=temp;
  }
  
  for(int i=a*b; i>0; i--){//倒着查找,第一次查出来的就是最大的无法组合数
   if(!Check(i, a, b)){
    System.out.println(i);
    break;
   }
  }
  
 }
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  test1();
 }
}


 

0.0分

6 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换

万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区

厉害了
2019-02-26 15:54:12
是如何知道被组合的最大数不可能超过a*b的? 求解答
2019-02-14 04:43:56
  • «
  • 1
  • »