c语言:个2位数乘以一个3位数等于一个4位数

题目:一个2位数乘以一个3位数等于一个4位数,这3个数的全部9个数字取自1到9, 不得重复,编程求这3个数分别是?

能帮忙指出代码中的错误吗?

代码:

#include
int main()
{
    int i,j,k,n,a[10]={0},b[3],flag=1;
    for(j=123;j<=987;j++)
    {
        for(i=12;i<=98;i++)
        {
            if(i*j<1234||i*j>9876)
                continue;
            b[0]=i;
            b[1]=j;
            b[2]=i*j;
            for(k=0;k<3;k++)
            {
                n=b[k];
                while(n)
                {
                    a[n%10]=1;
                    n/=10;
                }
            }
            for(k=0;k<10;k++)
            {
                if(a[k]!=1)
                {
                    flag=0;
                    break;
                }
            }
            if(flag)
            {
                printf("%d %d %d",i,j,i*j);
                break;
            }
        }
    }
     return 0;
}

错误原因应该是标志flag和数组a在每次测试每组式子前没有初始化,然后判断式子是否是1-9九个数那里要从数组a下标为1的位置开始判断,修改如下:

#include <stdio.h>

int main()
{
    int i,j,k,n,a[10]={0},b[3],flag=1;
    for(j=123;j<=987;j++)
    {
        for(i=12;i<=98;i++)
        {
            for(int p=0;p<10;p++){
                a[p] = 0;
            } 
            flag=1;
            if(i*j<1234||i*j>9876)
                continue;
            b[0]=i;
            b[1]=j;
            b[2]=i*j;
            for(k=0;k<3;k++)
            {
                n=b[k];
                while(n)
                {
                    a[n%10]=1;
                    n/=10;
                }
            }
            for(k=1;k<10;k++)
            {
                if(a[k]!=1)
                {
                    flag=0;
                    break;
                }
            }
            if(flag)
            {
                printf("%d %d %d\n",i,j,i*j);
                break;
            }
        }
    }
     return 0;
}


img