• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
youdiankun
博客园    首页    新随笔    联系   管理    订阅  订阅

蓝桥杯-买不到的数目

买不到的数目

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

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

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

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

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

要求输出: 一个正整数,表示最大不能买到的糖数

例如: 用户输入: 4 7 程序应该输出: 17

再例如: 用户输入: 3 5 程序应该输出: 7

 

看到这道题无从下手,不知道怎么做,看了别人的代码,还想了一个小时。

 1 #include<iostream>
 2 #include<cstring>
 3 using namespace std;
 4 
 5 #define maxn 1000001
 6 int a[maxn];
 7 int x,y;
 8 
 9 int piece()
10 {
11     int i;
12     memset(a,0,sizeof(a));
13     cin>>x>>y;
14     a[0]=1;
15     for(i=1;i<maxn;i++)
16     {
17         if(i>=x&&a[i-x])  //其实就用一个大数组存储,比如x=4,y=7,由a[0]=1先让a[4]=1,a[7]=1,在一点点拼凑,将
18         {
19             a[i]=1;      //所有可能的值都置成1     
20         }
21         else if(i>=y&&a[i-y])
22         {
23             a[i]=1;
24         }
25     }
26     int s=0;
27     for(i=1;i<maxn;i++)
28     {
29         if(i>s&&!a[i])
30         {
31             s=i;    //从而找到不可能的最大值
32         }
33     }
34     return s;
35 }
36 
37 int main()
38 {
39     printf("%d\n",piece());
40     return 0;
41 }
42 
43 //想明白了其实思路很简单,只是我无法用代码这么清晰的表达出来。

 

posted @ 2014-03-06 11:07  youdiankun  阅读(1070)  评论(1)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3