#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;
}
逻辑分析
最新推荐文章于 2023-12-17 08:52:09 发布