题目地址:点击打开链接
思路:简单枚举,每次输入a,b,c是一个筛选条件,看最后筛下的符合条件的数字的个数是否为1即可,挺考基本功的
AC代码:
#include <iostream> #include <cstdio> #include <cstring> using namespace std; bool judge[10000]; int num1[10],num2[4]; int num3[10]; int main() { int n,a,b,c,i,j,sum1,sum2; int l,m,k,y; while(scanf("%d",&n),n) { memset(judge,true,sizeof(judge)); while(n--) { memset(num1,0,sizeof(num1)); scanf("%d%d%d",&a,&b,&c); l = a; k = 0; while(l) { m = l % 10; num1[m]++; num2[k++] = m; l /= 10; } for(i=1000; i<=9999; i++) { if(judge[i])//每次从上一次符合条件的数字中再筛选 { sum1 = 0; sum2 = 0; memset(num3,0,sizeof(num3)); l = i; y = 0; while(l) { k = l % 10; num3[k]++; if(k == num2[y++]) sum1++; l /= 10; } for(j=0; j<10; j++) { sum2 += min(num3[j],num1[j]); } if(sum2 == b && sum1 == c) { judge[i] = true; } else judge[i] = false; } } } int sum3 = 0,x; for(i=1000; i<=9999; i++) { if(judge[i]) { sum3++; x = i; } } if(sum3 != 1) printf("Not sure\n"); else printf("%d\n",x); } return 0; }