zoukankan      html  css  js  c++  java
  • 买不到的数目

    欢迎访问我的新博客:http://www.milkcu.com/blog/

    原文地址:http://www.milkcu.com/blog/archives/1395404220.html

    引言

    这是2013年第四届蓝桥杯全国软件大赛预赛A组(C/C++组)第8题,为编程题,本文提供了两种解法。

    题目描述

    标题:买不到的数目

        小明开了一家糖果店。他别出心裁:把水果糖包成4颗一包和7颗一包的两种。糖果不能拆包卖。
        小朋友来买糖的时候,他就用这两种包装来组合。当然有些糖果数目是无法组合出来的,比如要买 10 颗糖。
        你可以用计算机测试一下,在这种包装情况下,最大不能买到的数量是17。大于17的任何数字都可以用4和7组合出来。
        本题的要求就是在已知两个包装的数量时,求最大不能组合出的数字。

    输入:
    两个正整数,表示每种包装中糖的颗数(都不多于1000)
    要求输出:
    一个正整数,表示最大不能买到的糖数
    不需要考虑无解的情况

    例如:
    用户输入:
    4 7
    程序应该输出:
    17
    再例如:
    用户输入:
    3 5
    程序应该输出:
    7
     
    资源约定:
    峰值内存消耗 < 64M
    CPU消耗  < 3000ms

    请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。
    所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
    注意: main函数需要返回0
    注意: 只使用ANSI C/ANSI C++ 标准,不要调用依赖于编译环境或操作系统的特殊函数。
    注意: 所有依赖的函数必须明确地在源文件中 #include <xxx>, 不能通过工程设置而省略常用头文件。
    提交时,注意选择所期望的编译器类型。

    分析

    这题看上去让人摸不着头脑,不知如何下手。

    第一种思路是枚举法。

    首先要找出枚举上界,枚举上界为最大可能买不到的数,好像是两数的最小公倍数,不知为何?

    当然数据量较小的时候,我直接取了两数之积,在练习评测系统中也可以通过。

    然后就是遍历每种包装的数目,限制条件为最大可能买不到的数目,并把结果保存到数组中。

    最后遍历数组得到最后答案。

    第二种思路是个公式。

    假设第一种包装中糖的颗数为a,第二种包装中糖的颗数为b,则最大不能组合出的数字为a * b - a - b。

    这公式不知如何推导,多列举几组数可以归纳出来,练习评测系统也可以通过。

    代码实现

    枚举法

    #include <iostream>
    #include <cstring>
    #include <algorithm>
    #define MAXN 1000001
    using namespace std;
    int vis[MAXN];
    int main(void) {
    	int a, b;
    	cin >> a >> b;
    	int maxn = a * b;
    	memset(vis, 0, sizeof(vis));
    	for(int i = 0; i * a <= maxn; i++) {
    		for(int j = 0; j * b <= maxn; j++) {
    			if(i * a + j * b > maxn) {
    				break;
    			}
    			vis[i * a + j * b] = 1;
    		}
    	}
    	for(int i = maxn; i > 0; i--) {
    		if(vis[i] == 0) {
    			cout << i << endl;
    			break;
    		}
    	}
    	return 0;
    }

    公式法

    #include <iostream>
    using namespace std;
    int main(void) {
    	int a, b;
    	cin >> a >> b;
    	cout << a * b - a - b << endl;
    	return 0;
    }

    (全文完)

  • 相关阅读:
    一、Dapper基本操作
    Javascript基础--函数(Function对象)
    【Selenium专题】FAQ_浏览器_ChromeDriver版本导致报错
    mvn install 报错Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.3.2 错误: 找不到符号
    Eclipse中mvn install 报错error in opening zip file
    Maven项目编译时报错缺少tools.jar
    maven-compiler-plugin 版本错误解决方法
    【QTP专题-优化】VBS脚本启动QTP并运行测试
    QTP 场景恢复– 函数调用
    达梦数据库(DaMeng)如何删除IDENTITY自增属性字段
  • 原文地址:https://www.cnblogs.com/milkcu/p/3808864.html
Copyright © 2011-2022 走看看