买不到的数目

 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 }

 

你可能感兴趣的:(买不到的数目)