买不到的数目

 1 /*小明开了一家糖果店。他别出心裁:把水果糖包成4颗一包和7颗一包的两种。糖果不能拆包卖。
 2 
 3     小朋友来买糖的时候,他就用这两种包装来组合。当然有些糖果数目是无法组合出来的,比如要买 10 颗糖。
 4 
 5     你可以用计算机测试一下,在这种包装情况下,最大不能买到的数量是17。大于17的任何数字都可以用4和7组合出来。
 6 
 7     本题的要求就是在已知两个包装的数量时,求最大不能组合出的数字。
 8 
 9 输入:
10 两个正整数,表示每种包装中糖的颗数(都不多于1000)
11 
12 要求输出:
13 一个正整数,表示最大不能买到的糖数
14 
15 不需要考虑无解的情况
16 
17 例如:
18 用户输入:
19 4 7
20 程序应该输出:
21 17
22 
23 再例如:
24 用户输入:
25 3 5
26 程序应该输出:
27 7
28 
29 
30 
31  */
32 
33 //只支持小数
34 #include<stdio.h>
35 #include<string.h>
36 int a[10010];
37 int b[10010];
38 
39 int main()
40 {
41     int i,j,n,m;
42     memset(a,0,sizeof(a));
43     memset(b,0,sizeof(b));
44     scanf("%d%d",&n,&m);
45     for(i=0;i<=10000;i+=n)
46         a[i]=1;
47     for(i=0;i<=10000;i++)
48         for(j=0;i+j<=10000;j+=m)
49             b[i+j]+=a[i];
50 
51     for(i=0;i<=10000;i++)
52         a[i]=b[i];
53     for(i=10000;i>=0;i--)
54         if(!a[i]) break;
55     printf("%d\n",i);
56     return 0;
57 }
58 #include"stdio.h"
59 #include"stdlib.h"
60 #include"time.h"
61 #define max 100000000
62 int main()
63 {int m,n,temp;
64     long int start,finish;
65 scanf("%d %d",&m,&n);
66     start=clock();
67 long int *p;
68 p=(long *)malloc(sizeof(long)*max);//开辟空间,建立一张0,1表
69 p[0]=1;//初始化
70 if(m<n)
71 {temp=m; m=n ;n=temp;}//保证n<m
72 temp=0;//初始化
73 for(long int i=1;i<max;i++)
74 {p[i]=0;//初始化
75 if(i>=m&&p[i-m]) p[i]=1; 
76 else
77 if(i>=n&&p[i-n]) p[i]=1;
78 if(p[i]) temp++; else temp=0;
79 if(temp==n) {printf("%ld",i-n); break; }
80 }
81 /*long int kk=0;
82 for(long int i=0;i<max;i++)
83 {if(i>kk&&!p[i])
84 kk=i;
85 }
86 printf("%ld",kk);*/
87 finish=clock();
88 printf("\nall time is: %lfs",(finish-start)/1000.0);
89 printf("\n");
90 system("pause");
91 }
原文地址:https://www.cnblogs.com/xiaofanke/p/3111365.html