啊哈算法之暴力枚举

枚举算法又叫做穷举算法。

□□□+□□□=□□□,将数字1-9分别填入9个□中,每个数字只能使用一次使得等式成立。

暴力穷举法:

#include <stdio.h>
#include <iostream>

int main()
{
    int a, b, c, d, e, f, g, h, i, total = 0;
    for (a = 1; a <= 9;a++)
        for (b = 1; b <= 9; b++)
            for (c = 1; c <= 9; c++)
                for (d = 1; d <= 9; d++)
                    for (e = 1; e <= 9; e++)
                        for (f = 1; f <= 9; f++)
                            for (g = 1; g <= 9; g++)
                                for (h = 1; h <= 9; h++)
                                    for (i = 1; i <= 9; i++)
                                    {
                                        //接下来是判断的条件是每一位上的数都不相等
                                        if (a != b&&a != c&&a != d&&a != e&&a != f&&a != g&&a != h&&a != i
                                            &&b != c&&b != d&&b != e&&b != f&&b != g&&b != h&&b != i
                                            &&c != d&&c != e&&c != f&&c != g&&c != h&&c != i
                                            &&d != e&&d != f&&d != g&&d != h&&d != i
                                            &&e != f&&e != g&&e != h&&e != i
                                            &&f != g&&f != h&&f != i
                                            &&g != h&&g != i
                                            &&h != i
                                            &&a * 100 + b * 10 + c + d * 100 + e * 10 + f == g * 100 + h * 10 + i)
                                        {
                                            total++;
                                            printf("%d%d%d+%d%d%d = %d%d%d\n", a, b, c, d, e, f, g, h, i);
                                        }
                                    }
    printf("total = %d\n", total / 2);

    system("pause");
    return 0;
}

标记法:用一个Book数组来解决互不相等的问题。

#include <stdio.h>
#include <iostream>

int main()
{
    int a[10],i,total = 0,book[10],sum;
    //这里用a[1]-a[9]来代替刚才的a,b,...,i
    for (a[1] = 1; a[1] < 10; a[1]++)
        for (a[2] = 1; a[2] < 10; a[2]++)
            for (a[3] = 1; a[3] < 10; a[3]++)
                for (a[4] = 1; a[4] < 10; a[4]++)
                    for (a[5] = 1; a[5] < 10; a[5]++)
                        for (a[6] = 1; a[6] < 10; a[6]++)
                            for (a[7] = 1; a[7] < 10; a[7]++)
                                for (a[8] = 1; a[8] < 10; a[8]++)
                                    for (a[9] = 1; a[9] < 10; a[9]++)
                                    {
                                        for (i = 1; i <= 9; i++)
                                            book[i] = 0;
                                        for (i = 1; i <= 9;i++)//如果某个数出现过就标记一下
                                        {
                                            book[a[i]] = 1;
                                        }
                                        //统计共出现了多少个不同的数
                                        sum = 0;
                                        for (i = 1; i <= 9; i++)
                                            sum += book[i];
                                        //如果正好出现了9个不同的数,并且满足等式条件,则输出
                                        if (sum == 9 && a[1] * 100 + a[2] * 10 + a[3] + a[4] * 100 + a[5] * 10 + a[6] == a[7] * 100 + a[8] * 10 + a[9])
                                        {
                                            total++;
                                            printf("%d%d%d+%d%d%d = %d%d%d\n", a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9]);
                                        }

                                    }
    printf("total = %d\n", total / 2);

    system("pause");
    return 0;
}

猜你喜欢

转载自blog.csdn.net/janmesyang/article/details/81908155
今日推荐