韩信点兵OJ时间超限怎么办?

img

img

提交到OJ上时间超限,我该怎么改?哪出问题了?救救孩子吧,谢谢!

供参考:

#include<stdio.h>
int main()
{
    int i,a,b,c,n,flg=0;
    scanf("%d%d%d%d",&a,&b,&c,&n);
    for (i = 2;i < n; i++)
    {
        if (i % a == 1 && i % b == 1 && i % c == 1)
        {
            printf("%d", i);
            flg = 1;
            break;
        }
    }
    if(!flg) printf("Wrong count!");
       
    return 0;
}

这个可以过:你写的那个for循环嵌套太多了,非常容易超时

#include<stdio.h>
#include<math.h>
int max(int a,int b,int c)
 {                       //自定义函数max
    if(a>b&&a>c) {          // 若a的值最大
        return a;           // 返回a
    } else if(b>a&&b>c) {   // 若b的值最大
        return b;           // 返回b
    } else {
        return c;           //   否则返回c
    }
 }
int main()
{
   int a,b,c,n,i,f=1,p,q=1;
   scanf("%d%d%d%d",&a,&b,&c,&n);
       p = max(a,b,c);
  for(i=p;i<=n;)
    {
          if(i%a==0&&i%b==0&&i%c==0&&i<=28000&&i+1<=n)
       {
           printf("%d",i+1);
           f=0;
           break;
       }
          q++;           
          i=p*q;
    }
   if(f==1)
   printf("Wrong count!");
   return 0;
}