题目链接:
通过人数:5276
题目分析:
这道题总情况不多,只有不超过C(10,6)^2 = 44100种情况,蛮力算法完全可行。故直接蛮力枚举筛选计数。
解题过程(代码仅供参考,因为偷懒,代码风格什么的实在不好意思...):
【比较简单,不做特殊说明,只需要注意两个骰子的数字完全对换是诶同一种情况。】
#include<stdio.h>
bool check(int * m, int n)
{
for (int i=0;i<6;i++)
if (m[i]==n)
return 1;
return 0;
}
int main ()
{
int a[6];
int b[6];
int ans=0;
for (a[0]=0;a[0]<=9;a[0]++){
for (a[1]=a[0]+1;a[1]<=9;a[1]++){
for (a[2]=a[1]+1;a[2]<=9;a[2]++){
for (a[3]=a[2]+1;a[3]<=9;a[3]++){
for (a[4]=a[3]+1;a[4]<=9;a[4]++){
for (a[5]=a[4]+1;a[5]<=9;a[5]++){
for (b[0]=0;b[0]<=9;b[0]++){
for (b[1]=b[0]+1;b[1]<=9;b[1]++){
for (b[2]=b[1]+1;b[2]<=9;b[2]++){
for (b[3]=b[2]+1;b[3]<=9;b[3]++){
for (b[4]=b[3]+1;b[4]<=9;b[4]++){
for (b[5]=b[4]+1;b[5]<=9;b[5]++){
if (!(check(a,0)&&check(b,1) ||
check(b,0)&&check(a,1)))
continue;
if (!(check(a,0)&&check(b,4) ||
check(b,0)&&check(a,4)))
continue;
if (!(check(a,2)&&check(b,5) ||
check(b,2)&&check(a,5)))
continue;
if (!(check(a,1)&&check(b,8) ||
check(b,1)&&check(a,8)))
continue;
if (!(check(a,0)&&check(b,9) ||
check(a,0)&&check(b,6) ||
check(b,0)&&check(a,9) ||
check(b,0)&&check(a,6)))
continue;
if (!(check(a,1)&&check(b,9) ||
check(a,1)&&check(b,6) ||
check(b,1)&&check(a,9) ||
check(b,1)&&check(a,6)))
continue;
if (!(check(a,3)&&check(b,9) ||
check(a,3)&&check(b,6) ||
check(b,3)&&check(a,9) ||
check(b,3)&&check(a,6)))
continue;
if (!(check(a,4)&&check(b,9) ||
check(a,4)&&check(b,6) ||
check(b,4)&&check(a,9) ||
check(b,4)&&check(a,6)))
continue;
ans++;
}}}}}}}}}}}}
printf("%d\n",ans/2);
return 0;
}
以上只是我做题时的解法。
如果有更好的解法、更好的思路,欢迎评论讨论~O(∩_∩)O~