2018-11-02洛谷P1008三连击题解

我的想法是让三组数分别等于a,b,c,又因为三组数要有1:2:3的关系,所以直接令b=2a,c=3a,接下来在检测a,b,c里面有没有重复的数字,把a,b,c的个十百位全部分离出来,放到一个数组里面,在用循环判断数组的元素是不是有重复,如果没有重复就输出。
第一次做完后出错的地方:
1、应该将flag=1放在最外层的for循环中,应该循环一次就初始化一次flag的值,否则第一次循环flag=0后后面的flag全部都会为0
2、在比较数组的元素有没有重复的时候要注意i不能够等于j,因此在判断的时候应该加上这一条。
3、数组元素不能够出现0

附上最后成功运行的代码

#include 
#include 

int main()
{
    int a,b,c;
    int i,j;
    for(a=123;a<329;a++)
    {
        int flag=1;
        b=a*2;
        c=a*3;
        int k[9];
        int d,e,f;
        d=a;
        e=b;
        f=c;
        for(i=0;i<9;i=i+3)
        {
            k[i]=d%10;
            d=d/10;
            k[i+1]=e%10;
            e=e/10;
            k[i+2]=f%10;
            f=f/10;
        }
        for(i=0;i<9;i++)
        {
            for(j=0;j<9;j++)
            {
                if(k[i]==k[j]&&i!=j)
                    flag=0;
            }
        }
        for(i=0;i<9;i++)
            if(k[i]==0)
            flag=0;

        if(flag==1)
            printf("%d %d %d\n",a,b,c);
    }

    return 0;
}

如果有错误或者需要改进的地方,欢迎指正

你可能感兴趣的:(2018-11-02洛谷P1008三连击题解)