小明开了一家糖果店、把水果糖包成4颗一包和7颗一包的两种。糖果不能拆包卖 小朋友来买糖的时候,他就用两种包装来组合,当然有些糖果数目是无法组合出来的,比如要买10颗糖 在这种包装情况下,最大不能买到

2023-11-10

解法一:

import java.util.Scanner;

/**
 小明开了一家糖果店、把水果糖包成4颗一包和7颗一包的两种。糖果不能拆包卖
小朋友来买糖的时候,他就用两种包装来组合,当然有些糖果数目是无法组合出来的,比如要买10颗糖
 在这种包装情况下,最大不能买到的数量是17,大于17的任何数字都可以用4和7组合出来 本题的要求是在已知两个包装的数量时,求最大不能组合的出的数字。
 */
 
//分析:
//ax+by=c,不定方程的解,a=4,b=7,c=17,这种情况下,学院实际上有解,7*2+(7-4)==3*7-1*4
//a,b 互质,一定有解且解的数目无穷
//c是gcd(a,b)的倍数,方程一定有解,而且有无穷多解

//条件:一定有解 a,b互质
//条件二:xy都是大于等于0的整数,在这个限定的条件下有的c是无解的,那么c的上界至多是a*b

public class _买不到的数目 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int a = sc.nextInt();
		int b = sc.nextInt();
		System.out.println(a * b - a - b);
	}

}

解法二:

public class _买不到的数字解法二 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int a = sc.nextInt();
		int b = sc.nextInt();
		
		int max=a*b; //最大值
		Set<Integer> ss=new HashSet<Integer>();//去重
		
		//从0开始枚举到max
		for(int x=0; a*x < max; x++) {
			for(int y = 0; a*x + b*y < max; y++) {
				ss.add(a*x+b*y);//用不小于0的x和y与系数能组合出来的数加到set中
			}
		}
		for(int i=max-1; i>=0;i--) {
			if(!ss.contains(i)) {//查找第一个不在set中的值
				System.out.println(i);
				break;
			}
		}
	}
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

小明开了一家糖果店、把水果糖包成4颗一包和7颗一包的两种。糖果不能拆包卖 小朋友来买糖的时候,他就用两种包装来组合,当然有些糖果数目是无法组合出来的,比如要买10颗糖 在这种包装情况下,最大不能买到 的相关文章

  • 再见以前说再见 数据结构复习

    数据结构 实验14 15 基本排序算法实现 数据结构 实验12 13 基本查找算法实现 数据结构 实验10 11 图及其应用 数据结构 实验7 9 二叉树的基本操作和应用 数据结构 实验六 模式匹配 数据结构 实验五 队列的算法实现及应用
  • 配置setting.json解决vscode和vim按键冲突

    vim 对于需要经常使用的vscode中的复制 粘贴 剪切 全选 查找和新建等 在vim正常模式下是不可用的 不过可以在配置文件中取消vim handleKeys键位映射 即保留这些原始按键功能 对于上述可能存在和正常按键冲突 可以通过设置
  • LeetCode 1、两数之和(C)

    作者只是一个小白 最近希望能提升自己的代码水平 所以开始刷leetcode 写博客是为了整理自己的学习内容 难免会出错 如果有大大发现 非常欢迎指正哦 目录 题目 1 两数之和 题解 方法一 双重for循环 暴力枚举 1 自己的代码 2 代

随机推荐