weixin_46382111 2020-02-22 13:36 采纳率: 100%
浏览 877
已采纳

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;
}

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

  • 写回答

1条回答 默认 最新

  • threenewbee 2020-02-22 13:43
    关注

    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

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?