链接:http://acm.hdu.edu.cn/showproblem.php?pid=1172
把1000~9999间的数字遍历一遍,如果只有一个符合条件的话,就输出,否则 not sure
#include <iostream> using namespace std; char data[105][5]; int a[105],b[105]; int main() { bool judge(int m,int n); int n; int ans; int count; int i,j; bool sign; while(cin>>n&&n) { count=0; sign=false; for(i=0;i<n;i++) { cin>>data[i]>>a[i]>>b[i]; } for(i=1000;i<=9999;i++) { for(j=0;j<n;j++) { sign=judge(i,j); //判断i是否符合第j个条件 if(!sign) break; } if(sign) { count++; ans=i; } } if(count==1) cout<<ans<<endl; else cout<<"Not sure"<<endl; } return 0; } bool judge(int m,int n) //判断m是否符合条件n { int i,j,k; bool mark[4]; char tem[5]; sprintf(tem,"%d",m); int count=0; for(i=0;i<4;i++) mark[i]=false; for(i=0;i<4;i++) if(tem[i]==data[n][i]) count++; if(count!=b[n]) return false; count=0; for (i=0;i<4;i++) for(j=0;j<4;j++) { if(tem[i]==data[n][j]&&!mark[j]) { mark[j]=true; count++; break; } } if(count!=a[n]) return false; return true; }
天下武功,唯快不破