逻辑分析

这里写图片描述

#include<stdio.h>
int counter = 0;

void Print(int *ans)
{
    int i;
    for (i = 1; i <= 10; i++)
    {
        printf("%d=%c\n", i, 'A' - 1 + ans[i]);
    }
    printf("\n");
}
int Judge(int *ans)
{
    int i,j;
    int sum[5] = { 0 };
    int min,max;
    int note;
    switch (ans[2])
    {
        case 1:
        {
            if (!(ans[5] == 3))
                return 0;
            break;
        }
        case 2:
        {
            if (!(ans[5] == 4))
                return 0;
            break;
        }
        case 3:
        {
            if (!(ans[5] == 1))
                return 0;
            break;
        }
        case 4:
        {
            if (!(ans[5] == 2))
                return 0;
            break;
        }
    }
    switch (ans[3])
    {
        case 1:
        {
            if (!(ans[6]==ans[2]&&ans[6]==ans[4]&&ans[6]!=ans[3]))
                return 0;
            break;
        }
        case 2:
        {
            if (!(ans[3] == ans[2] && ans[3] == ans[4] && ans[3] != ans[6]))
                return 0;
            break;
        }
        case 3:
        {
            if (!(ans[3] == ans[6] && ans[3] == ans[4] && ans[3] != ans[2]))
                return 0;
            break;
        }
        case 4:
        {
            if (!(ans[3] == ans[6] && ans[3] == ans[2] && ans[3] != ans[4]))
                return 0;
            break;
        }
    }
    switch (ans[4])
    {
        case 1:
        {
            if (!(ans[1] == ans[5] && ans[2] != ans[7] && ans[1] != ans[9] && ans[6] != ans[10]))
                return 0;
            break;
        }
        case 2:
        {
            if (!(ans[1] != ans[5] && ans[2] == ans[7] && ans[1] != ans[9] && ans[6] != ans[10]))
                return 0;
            break;
        }
        case 3:
        {
            if (!(ans[1] != ans[5] && ans[2] != ans[7] && ans[1] == ans[9] && ans[6] != ans[10]))
                return 0;
            break;
        }
        case 4:
        {
            if (!(ans[1] != ans[5] && ans[2] != ans[7] && ans[1] != ans[9] && ans[6] == ans[10]))
                return 0;
            break;
        }
    }
    switch (ans[5])
    {
        case 1:
        {
            if (!(ans[8] == ans[5] && ans[4] != ans[5] && ans[9] != ans[5] &&ans[7] != ans[5]))
                return 0;
            break;
        }
        case 2:
        {
            if (!(ans[8] != ans[5] && ans[4] == ans[5] && ans[9] != ans[5] && ans[7] != ans[5]))
                return 0;
            break;
        }
        case 3:
        {
            if (!(ans[8] != ans[5] && ans[4] != ans[5] && ans[9] == ans[5] && ans[7] != ans[5]))
                return 0;
            break;
        }
        case 4:
        {
            if (!(ans[8] != ans[5] && ans[4] != ans[5] && ans[9] != ans[5] && ans[7] == ans[5]))
                return 0;
            break;
        }

    }
    switch (ans[6])
    {
        case 1:
        {
            if (!((ans[2] == ans[8] && ans[4] == ans[8]) && (ans[1] != ans[8] || ans[6] != ans[8])
                && (ans[3] != ans[8] || ans[10] != ans[8]) && (ans[5] != ans[8] || ans[9] != ans[8])))
                return 0;
            break;
        }
        case 2:
        {
            if (!((ans[2] != ans[8] || ans[4] != ans[8]) && (ans[1] == ans[8] && ans[6] == ans[8])
                && (ans[3] != ans[8] || ans[10] != ans[8]) && (ans[5] != ans[8] || ans[9] != ans[8])))
                return 0;
            break;
        }
        case 3:
        {
            if (!((ans[2] != ans[8] || ans[4] != ans[8]) && (ans[1] != ans[8] || ans[6] != ans[8])
                && (ans[3] == ans[8] && ans[10] == ans[8]) && (ans[5] != ans[8] || ans[9] != ans[8])))
                return 0;
            break;
        }
        case 4:
        {
            if (!((ans[2] != ans[8] || ans[4] != ans[8]) && (ans[1] != ans[8] || ans[6] != ans[8])
                && (ans[3] != ans[8] || ans[10] != ans[8]) && (ans[5] == ans[8] && ans[9] == ans[8])))
                return 0;
            break;
        }
    }
    min = 10;
    max = 0;
    note = 0;
    for (i = 1; i <= 10; i++)
    {
        sum[ans[i]]++;  
    }
    for (i = 1; i <= 4; i++)
    {
        if (sum[i] != 0)
        {
            if (sum[i] < min)
            {
                note = i;
                min = sum[i];
            }
            if (sum[i] > max)
            {
                max = sum[ans[i]];
            }
        }

    }
    for (i = 1; i <= 4; i++)
    {
        if (note != i)
        {
            if ((sum[note] >= sum[i]))
                return 0;
        }
    }
    switch (ans[7])
    {
        case 1:
        {
            if (!(ans[7] == 3))
                return 0;
            break;
        }
        case 2:
        {
            if (!(ans[7] == 2))
                return 0;
            break;
        }
        case 3:
        {
            if (!(ans[7] == 1 ))
                return 0;
            break;
        }
        case 4:
        {
            if (!(ans[7] == 4 ))
                return 0;
            break;
        }
    }
    switch (ans[8])
    {
        case 1:
        {
            if (ans[7] + 1 == ans[1] || ans[7] - 1 == ans[1])
                return 0;
            break;
        }
        case 2:
        {
            if (ans[5] + 1 == ans[1] || ans[5] - 1 == ans[1])
                return 0;
            break;
        }
        case 3:
        {
            if (ans[2] + 1 == ans[1] || ans[2] - 1 == ans[1])
                return 0;
            break;
        }
        case 4:
        {
            if (ans[10] + 1 == ans[1] || ans[10] - 1 == ans[1])
                return 0;
            break;
        }

    }
    if (ans[1] == ans[6])
        note = 1;
    else
        note = 0;
    switch (ans[9])
    {
        case 1:
        {
            if (note == 1)
            {
                if (ans[6] == ans[5])
                    return 0;
                else
                    break;
            }
            else
            {
                if (ans[6] == ans[5])
                    break;
                else
                    return 0;
            }

        }
        case 2:
        {
            if (note == 1)
            {
                if (ans[10] == ans[5])
                    return 0;
                else
                    break;
            }
            else
            {
                if (ans[10] == ans[5])
                    break;
                else
                    return 0;
            }

        }
        case 3:
        {
            if (note == 1)
            {
                if (ans[2] == ans[5])
                    return 0;
                else
                    break;
            }
            else
            {
                if (ans[2] == ans[5])
                    break;
                else
                    return 0;
            }
        }
        case 4:
        {
            if (note == 1)
            {
                if (ans[9] == ans[5])
                    return 0;
                else
                    break;
            }
            else
            {
                if (ans[9] == ans[5])
                    break;
                else
                    return 0;
            }
        }
    }
    switch (ans[10])
    {
        case 1:
        {
            if (!(max - min == 3))
                return 0;
            break;
        }
        case 2:
        {
            if (!(max - min == 2))
                return 0;
            break;
        }
        case 3:
        {
            if (!(max - min == 4))
                return 0;
            break;
        }
        case 4:
        {
            if (!(max - min == 1))
                return 0;
            break;
        }
    }
    return 1;
}
void Search(int *ans, int a)
{
    int i;
    for (i = 1; i <= 4; i++)
    {
        ans[a] = i;
        if (a == 10)
        {
            if (Judge(ans) == 1)//逻辑判断
            {
                counter++;
                Print(ans);
            }
        }
        else
        {
            Search(ans, a + 1);
        }

    }
}
int main()
{
    int i, j;
    int ans[11];
    for (i = 1; i <= 10; i++)
    {
        ans[i] = 0;
    }
    Search(ans, 1);
    printf("共%d种\n", counter);
    system("pause");
    return 0;
}

猜你喜欢

转载自blog.csdn.net/zero_1778393206/article/details/79476445