import java.util.Scanner;
public class Test2 {
/*
* 小明开了一家糖果店。
他别出心裁:把水果糖包成4颗一包和7颗一包的两种。糖果不能拆包卖。
小朋友来买糖的时候,他就用这两种包装来组合。当然有些糖果数目是
无法组合出来的,比如要买 10 颗糖。 你可以用计算机测试一下,在这
种包装情况下,最大不能买到的数量是17。大于17的任何数字都可以用
4和7组合出来。
本题的要求就是在已知两个包装的数量时,求最大不能组合出的数字。
输入:
两个正整数,表示每种包装中糖的颗数(都不多于1000)
要求输出:
思路:
求4*x+7*y可以表示的连续整数到无穷的最小值
*/
public static void main(String[] args) {
Scanner scan=new Scanner(System.in);
int n=0,m=0;
try{
n=scan.nextInt();
m=scan.nextInt();
}catch(Exception e){
System.out.println("请输入正确的数据!");
}
int x=0,y=0;
boolean f=false;
//定义一个数组用来标记i是否能够用4*x+7*y表示。可以的话用1表示,不可以用0表示
int []nums=new int[1000];
for (int i = 0; i < nums.length; i++) {//初始化数组,全部赋值0
nums[i]=0;
}
for (int i = 0; i < 1000; i++) {
for (x = 0; x < 1000; x++) {
for (y = 0; y < 1000; y++) {//穷举法列出所有结果
if(n*x+m*y==i){//判断是否能够用4*x+7*y表示
f=true; //如果是真,则f=true; f是个标记,用来跳出循环的。
break;
}else{
f=false;//如果是假,则f=false;不能用4*x+7*y,继续循环找能够用4*x+7*y表示的i.
}
}
if(f){//如果是真,则f=true; f是个标记,跳出本层循环。
break;
}
}
if(f){//如果是真,说明i可以被4*x+7*y表示;它对应的数组置为"1";
nums[i]=1;
}
}
for (int i = nums.length-1; i >=0; i--) {//从数组最后往前找
if(nums[i]==0){ //如果碰到0,说明这个数不能用4*x+7*y表示。
System.out.println(i); //它也就是最大的
break;
}
}
}
}
买不到的数目
最新推荐文章于 2023-01-15 11:49:03 发布