刚看到题时,不知道怎么做。看了比赛时有88个人过了,应该不是很难,网上说是用DFS暴力。中午吃饭回去想了一下,感觉dfs挺麻烦的,回来看了一下别人的源码,才发现这么简单,唉~~~~,看来我对于搜索不是很熟啊。 #include <stdio.h> int a[20],h[20]; int judge(int num) { if(num==0) return 1; int i; for(i=1;i<=9;i++) { if(h[i]>=3) { h[i]-=3; if(judge(num-3)) return 1; h[i]+=3; } } for(i=1;i<=7;i++) { if(h[i] && h[i+1] && h[i+2]) { h[i]--; h[i+1]--; h[i+2]--; if(judge(num-3)) return 1; h[i]++; h[i+1]++; h[i+2]++; } } return 0; } int solve() { int i; for(i=1;i<=9;i++) h[i]=0; for(i=0;i<14;i++) { h[a[i]]++; if(h[a[i]]>4) return 0; } for(i=1;i<=9;i++) { if(h[i]>=2) { h[i]-=2; if(judge(12)) return 1; h[i]+=2; } } return 0; } int main() { int i,blank_flag; while(scanf("%d",&a[0])!=EOF) { blank_flag=0; for(i=1;i<13;i++) scanf("%d",&a[i]); for(i=1;i<=9;i++) { a[13]=i; if(solve()) { if(blank_flag) printf(" %d",i); else { blank_flag = 1; printf("%d",i); } } } printf("/n"); } return 0; }