【算法】暴力解决买不到的数目

//买不到的数目:找出最大不能有两个组合而成的数字
#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的下标就是最大的不能组合的数

posted @ 2020-03-31 16:08  美好事物  阅读(18)  评论(0编辑  收藏