码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2018-02-20 21:19:19      阅读:282      评论:0      收藏:0      [点我收藏+]

标签:[1]   小朋友   a*   需要   无法   highlight   计算机   pos   names   

 

小明开了一家糖果店。他别出心裁:把水果糖包成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算法))

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

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

标签:[1]   小朋友   a*   需要   无法   highlight   计算机   pos   names   

原文地址:https://www.cnblogs.com/zsy831143/p/8455804.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!