两个数字不能构成的最大数字(两个数字不同时为奇或同时为偶)

Posted zsy831143

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了两个数字不能构成的最大数字(两个数字不同时为奇或同时为偶)相关的知识,希望对你有一定的参考价值。

 

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

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

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

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

 

一: 简单算法

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

 二:常规算法

#include<iostream>
using namespace std;
int main ()
{
        int a[2] = {0};
        long int c[100000] = {0};
        cin>>a[0]>>a[1];
        long int i, j;
        c[a[0]] = 1;
        c[a[1]] = 1;
        for(i = 0; i < 2; i++)
        {
                for(j = 0; j < 10000; j++)
                {
                        if(c[j] == 1)
                                c[j+a[i]] = 1;
                }
        }
        for(i = 10000; i >= 1; i--)
                if(c[i] == 0){
                        cout<<i<<endl;
                        break;
                }
        return 0;
}

 常规这个算法只适合给的数字<=100的时候  如果大于 则出错(可以给他一个限定条件 就是范围不能超出你给的范围 (数组大小范围))

不过这个题目是1000以内  ~~

这个可以推出3个数字或多个数字不能构成的最大数字(如果这几个数字的最大公约数不为1 则为无穷个  否则为有限个  所以多个数字的时候先算出最大公约数(java的BigInteger中的.gcd算法))

然后在确定是否需要计算不能构成的最大数字~。

以上是关于两个数字不能构成的最大数字(两个数字不同时为奇或同时为偶)的主要内容,如果未能解决你的问题,请参考以下文章

Prime Independence

找出能被两个给定参数和它们之间的连续数字整除的最小公倍数。 范围是两个数字构成的数组,两个数字不一定按数字顺序排序。

FCC 中级算法题 最小公倍数

取数游戏

利用递归求两个数字的最大公约数。

P1123 取数游戏