【算法】暴力解决买不到的数目
//买不到的数目:找出最大不能有两个组合而成的数字 #include<stdio.h> #include<string.h> #define tar 50000 int main() { int a,b,i,j,k,max,min,f,end;//用f来记录数组的下标 int num[tar];//用来记录每个数字是否能用输入的两个数字进行记录,到时候进行遍历,从最后开始遍历,遇到第一个0就输出对应的下标就是最大的 memset(num,0,sizeof(num)); scanf("%d %d",&a,&b); max=a; min=b; //找出两个数中的较大值 if(max<b) { max=b; min=a; } f=max+1; for(i=max+1; i<=tar; i++)//记录组合后的数字 { int n1; n1=i/min; //当i可以被min或者max整除时,是可以的 if(i%min==0 || i%max==0) { num[i]=1; } else { //j记录min的系数 for(j=0; j<=n1; j++) { if((i-j*min)%max==0) { num[i]=1; } } } } //遍历num for(i=tar; i>max; i--) { if(num[i]==0) { end=i; break; } } printf("%d",end); return 0; }
首先将数组全部置为0,然后将能够组合的i下标对应的元素置为1,最后遍历的时候从后面向前面遍历,遍历到第一个为0的下标就是最大的不能组合的数