C语言枚举法:用1到9不重复输出,三位数乘两位数得四位数,

用枚举法输出如
## *## =####
#代表一个数字
要求用1到9组成式子且不重复,每个数字出现一次

    自己打的代码

    #include<stdio.h>

#include
int main(void)
{
long a = 10, b = 10, c = 10, d = 10;
int h[9] = { 0 }, i = 1, j = 1, num = 1;
for (a = 10;a < 100;a++)
{
for (b = 10;b < 100;b++)
{
for(c=10;c<100;c++)
{
for (d = 100;d<1000;d++)
{
if (a * b == c * d)
{
h[0] = a / 10;
h[1] = a % 10;
h[2] = b / 10;
h[3 ]= b % 10;
h[4] = c / 10;
h[5] = c % 10;
h[6 ]= d / 100;
h[7] = d % 100 / 10;
h[8] = d % 10;
for (i = 0;i < 9;i++)
{
if(h[i]==0)
{
num = 0;
continue;
}
for (j = i - 1;j < 9;j++)
{
if (h[i] == h[j])
num = 0;
else
continue;
}
}
if (num)
printf("%ld*%ld=%ld*%ld\n", a, b, c, d);
else
num = 1;
}
}
}
}
}
return 0;
}

不对,可能理解错误,没有

https://ask.csdn.net/questions/1053340 这个问题思路一样

稍微修改下

#include <stdio.h>
#include <string.h>

int judge(int* n)
{
    int arr[10];
    memset(arr, 0, sizeof(int) * 10);
    for (int i = 0; i < 3; i++)
    {
        int n1 = n[i];
        for (int j = 0; j < 4; j++)
        {
            arr[n1 % 10] = 1;
            n1 /= 10;
        }
    }
    for (int i = 1; i < 10; i++)
        if (!arr[i]) return 0;
    return 1;
}

int main()
{
    for (int i = 123; i <= 987; i++)
        for (int j = 12; j <= 98; j++)
        {
            if (i * j < 1234 || i * j > 9876) continue;
            int arr[3];
            arr[0] = i;
            arr[1] = j;
            arr[2] = i * j;
            if (judge(arr)) printf("%d * %d = %d\n", arr[0], arr[1], arr[2]);
        }
    return 0;
}

138 * 42 = 5796
157 * 28 = 4396
159 * 48 = 7632
186 * 39 = 7254
198 * 27 = 5346
297 * 18 = 5346
483 * 12 = 5796

问题解决的话,请点下采纳