zoukankan      html  css  js  c++  java
  • 蓝桥杯练习系统历届试题 买不到的数目

    问题描述

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

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

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

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

    输入格式

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

    输出格式

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

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

    据说是一个很水的题。可能是据大腿说吧。
    已知a, b,求ax+by不可能组成的数的最大值。于是我转而求ax+by能组成的连续的数的最小值。
    据上图,于是我需要找能使ax+by稳定+1时x和y满足的条件。于是我通过求ax-by = 1,(y减小 x增大)求出x满足的最小值x1,然后通过求by - ax = 1
    (y增大,x减小)求出最小值y1,然后这组解说明只有当x>=x1 或者 y>=y1的时候原式才能稳定+1。所以a*(x1-1) + b*(y1-1) 就是能组成的连续数列的最小值。
    减1即为不能组成的数的最大值。

    以上是大腿的思路。

    然后。看看看。

    大腿为什么那里会说错呢。就是我认为的,+1和-1的问题。

    真心不是故意刷屏的呢,终于理解了大腿的脑洞感觉好开心。

    T_T 真希望自己有大腿那么机智的脑袋~~~

    /*
     据说是一个很水的题。可能是据大腿说吧。
     已知a, b,求ax+by不可能组成的数的最大值。于是我转而求ax+by能组成的连续的数的最小值。
     据上图,于是我需要找能使ax+by稳定+1时x和y满足的条件。于是我通过求ax-by = 1,(y减小 x增大)求出x满足的最小值x1,然后通过求by - ax = 1
     (y增大,x减小)求出最小值y1,然后这组解说明只有当x>=x1 或者 y>=y1的时候原式才能稳定+1。所以a*(x1-1) + b*(y1-1) 就是能组成的连续数列的最小值。
     减1即为不能组成的数的最大值。
     */
    
    #include <stdio.h>
    #include <string.h>
    #include <iostream>
    using namespace std;
    
    int get(int a, int b) {
        for (int i=0; ; ++i) {
            if ((b*i + 1) % a == 0) {
                 //cout << i << "==" << (b*i+1)/a << endl;
                 return (b*i+1)/a ;
            }
        }
    }
    
    int main() {
        int a, b;
        while(cin >> a >> b) {
            int x = get(a, b);
            int y = get(b, a);
    
           // cout << x << " " << y << endl;
            int ans = a*(x-1) + b*(y-1) - 1;
            cout << ans << endl;
        }
        return 0;
    }
    

      

  • 相关阅读:
    这是个神奇的博客
    Tomcat Access Log 的格式
    CA证书
    记一次性能调优
    web系统能力培养计划
    金融知识学习
    读《华为区块链白皮书》
    马未都说收藏:陶瓷篇(8、9)元青花、永宣青花
    阿里历年面试试题
    回车(CR)换行(LF)的来历及区别
  • 原文地址:https://www.cnblogs.com/icode-girl/p/5264954.html
Copyright © 2011-2022 走看看