【蓝桥杯】真题训练 2013年C++A组 题8 买不到的数目

买不到的数目

问题描述
小明开了一家糖果店。他别出心裁:把水果糖包成4颗一包和7颗一包的两种。糖果不能拆包卖。

小朋友来买糖的时候,他就用这两种包装来组合。当然有些糖果数目是无法组合出来的,比如要买 10 颗糖。

你可以用计算机测试一下,在这种包装情况下,最大不能买到的数量是17。大于17的任何数字都可以用4和7组合出来。

本题的要求就是在已知两个包装的数量时,求最大不能组合出的数字。

输入格式
两个正整数,表示每种包装中糖的颗数(都不多于1000)

输出格式
一个正整数,表示最大不能买到的糖数

样例输入1
4 7
样例输出1
17
样例输入2
5 3
样例输出2
7

题目解析 

由题意得出结论:因为一定有解,所以输入的两个数一定是互质的

a * x +b * y = C,x y 互质,方程有解且都是整数的C的上界最大是 x * y;

方法一:0和100分的差距

#include <iostream>
using namespace std;

int main(int argc, char** argv) {
	
	int a, b;
	cin >> a >> b;
	cout << a * b - a - b << endl;

	return 0;
}

方法二:枚举

把所有两个数的组合方式枚举出来,存储到集合里面,最后反向输出没有出现的数,即为最大的不能组合的数 !

#include <iostream>
#include <set> 
using namespace std;

int main(int argc, char** argv) {
	
	int a, b;
	cin >> a >> b;
	
	set<int> ss;
	
	for(int x = 0; a*x <= a*b; x++){
		for(int y = 0; a*x + b*y <= a*b; y++){
			ss.insert(ss.end(), a*x+b*y);
		}
	}
	
	for(int i = a*b; i >= 0; i--) {
		if(ss.find(i) == ss.end()){	//i 不在set,即为答案 
			cout << i << endl;
			break;
		}
	}

	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_44566432/article/details/115144784