求教如何优化 一直超时

P1618 三连击(升级版)

CptEncy @ 2015-11-23 12:52:47

#include<stdio.h>  
#include<stdlib.h>  
int ifno=1;  
int a,b,c;
int main()  
{  
    int x,y,z;  
    scanf("%d %d %d\n",&a,&b,&c);  
    for(int i=1;i<=9;++i)  
    {  
        for(int j=1;j<=9;++j)  
        {  
            if(i==j)  
            {  
                continue;  
            }  
            for(int k=1;k<=9;++k)  
            {  
                if(i==k||j==k)  
                {  
                    continue;  
                }  
                for(int l=1;l<=9;++l)  
                {  
                    if(l==i||l==j||l==k)  
                    {  
                        continue;  
                    }  
                    for(int m=1;m<=9;++m)  
                    {  
                        if(i==m||j==m||k==m||l==m)  
                        {  
                            continue;  
                        }  
                        for(int n=1;i<=9;++n)  
                        {  
                            if(i==n||j==n||k==n||l==n||m==n)  
                            {  
                                continue;  
                            }  
                            for(int o=1;o<=9;++o)  
                            {  
                                if(i==o||j==o||k==o||l==o||m==o||n==o)  
                                {  
                                    continue;  
                                }  
                                for(int p=1;p<=9;++p)  
                                {  
                                    if(i==p||j==p||k==p||l==p||m==p||n==p||o==p)  
                                    {  
                                        continue;  
                                    }  
                                    for(int q=1;q<=n;++q)  
                                    {  
                                        if(i==q||j==q||k==q||l==q||m==q||n==q||o==q||p==q)  
                                        {  
                                            continue;  
                                        }  
                                        x=100*i+10*j+k;  
                                        y=100*l+10*m+n;  
                                        z=100*o+10*p+q;  
                                        if(x*b*c==y*a*c&&y*a*c==z*a*b)  
                                        {  
                                            ifno=0;  
                                            printf("%d %d %d\n",x,y,z);  
                                        }
                                        else
                                        {
                                            continue;
                                        }
                                    }  
                                }  
                            }  
                        }  
                    }  
                }  
            }  
        }  
    }  
    if(ifno)  
    {  
        printf("No!!!");  
    }  
    return 0;  
}  

by cx0627 @ 2016-02-22 22:09:21

来让省一大神告诉你,最后一个数要算出来,而不是枚举出来,这样少了10^3,自然时间大减。


by cx0627 @ 2016-02-22 22:09:54

改对了吧?


|