date8.03 买不到的数目
作者:互联网
买不到的数目
问题描述
小明开了一家糖果店。他别处心裁:把水果糖包成了4颗一包和7颗一包的两种。糖果不能拆包卖。
小朋友来买糖的时候,他就会用这两种包装来组合。当然有些糖果数目无法组合出来的,比如要买10颗糖。
你可以计算机测试一下,在这种包装的情况下,最大不能买到的数量是17。大于17的任何数字都可以用4和7组合出来。
本题要求就是在已知两个包装的数量时,求最大不能组合出的数字。
输入格式
两个正整数,表示每种包装中的糖的颗数(都不多于1000)
输出格式
一个正整数,表示最大不能买到的糖数。
样例输入1
4 7
样例输出1
17
样例输入2
3 5
样例输出2
7
思路
题目要求就是求两个数最大的不可组合数,对于题目中的4和7,值依次是:
4 7
4+4=8 4+7=11 7+7=14
8+4=12 8+7=15 11+4=15 11+7=18 14+4=18 14+7=21
12+4=16 12+7=19 15+4=19 15+7=22 18+4=22 18+7=25 21+4=25 21+7=28
16+4=20 16+7=23 19+4=23 19+7=26.....
像动态规划一样一层一层的求出,发现又15,16,18,19,20,21,22,23,24,没有17,所以17就是最大的不能组合数字,利用数组求出来记录每个数字,可以被组合出的数字使得count++,当遇到一个不能组合的则重置为0,当count的值大于两个数中的最大值时,那上一次记录的不能组合的数便是最大的不能组合数。
代码
package daily;
import java.util.Scanner;
public class d8_03 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
int b = sc.nextInt();
int max = Math.max(a,b);//两数中最大值
int[] arr = new int[10000];
arr[a] = 1;
arr[b] = 1;
int num = 0;//记录不能组合的数字下标
int count = 0;//统计可以组合数字的连续个数,当遇到不能组合的数字重置
for (int i = 1;i < arr.length;i++){
if (arr[i] == 0){//遇到不能组合的数,num记录数字,count重置
num = i;
count = 0;
}else {//arr[i]为1时,i+a,i+b数字也可以组合,赋值1。
arr[i + a] = 1;
arr[i + b] = 1;
count++;
}
if(count >= max){
break;
}
}
System.out.println(num);
}
}
标签:count,arr,买不到,数字,组合,int,date8.03,17,数目 来源: https://www.cnblogs.com/jing-study/p/15094291.html