买不到的数目

来源:互联网 发布:易语言ddos源码 编辑:程序博客网 时间:2024/04/28 01:18
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++) {//初始化数组,全部赋值0nums[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;}}}}

原创粉丝点击