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 循环相乘又不能超过n(我们定义的比较大的数)
     //然后用数组标记可以买到的数 标记为1 不能买默认都是0 
     //最后遍历数组 如果有连续的a 是可以买到的 那 减去a最近的不能买到 标记为
     //0的那个数值就是 最大买不到数目  其中a要保证是小的那个输入数就行了 
     /*
    #include <iostream>
    #include <algorithm>
    #include <cstring>
    #include <cmath>
    using namespace std;
    long long n=100000;
    
    int d,x;
    
    int cha(int a[])
    {
        int sum=0;
        for(int i=0;i<n;i++)
        {
            if(a[i]==1)
            {
                sum++;
                if(sum>=x) return i-x;//如果连续都可以买到 那减去x就是不能买的数目 
            }
            else
            {
                sum=0;
            }
        }
        return -1;
    }
    
    
    void f(int a,int b)
    {
        int c[n];
        for(int i=0;i<n/a;i++)  //为了确保后面的乘a b 不会溢出 
        for(int j=0;j<(n-i*a)/b;j++)
        {
            if(i*a+b*j < n) c[i*a+j*b] =1;//表示可以找到糖果 
            
        }
        
        cout << cha(c);
    
    } 
    
    int main()
    {
        cin >> x >> d;
        if(x>d)
        {
            int t=x;
            x=d;
            d=t;
        }
        f(x,d);
        
    } 
    实现代码
  • 相关阅读:
    精益创业和画布实战(2):皇包车和易途8,中文包车游世界
    精益创业和画布实战(2):皇包车和易途8,中文包车游世界
    互联网公司的技术体系
    互联网公司的技术体系
    Android开发——告诉你Adapter应该写在Activity里面还是外面
    Android开发——Android手机屏幕适配方案总结
    09-抽象工厂
    08-工厂方法
    07-简单工厂(不属于设计模式)
    06-开闭原则(OCP)
  • 原文地址:https://www.cnblogs.com/xieyupeng/p/7465482.html
Copyright © 2011-2022 走看看