您的位置:首页 > 其它

HDU 1172 猜数字

2017-03-03 16:52 295 查看
枚举所有的四位数,找到符合条件的,设置一个数组记录0~9出现次数再比较穷举的数,算出每个数字出现达标数量,判断位置就更容易了,直接比较就行了,数据量最大100*10000,无需考虑无解情况,有一个解就时可以确定,多个解就不能确定。

#include<stdio.h>
#include<string.h>
int main()
{
char a[102][4];
int i,j,n,x[102],y[102];
while(~scanf("%d",&n)&&n)
{
for(i=0; i<n; i++)
{
scanf("%s %d %d",a[i],&x[i],&y[i]);
}
int e=0,f;
short b[11];
for(j=1000; j<=9999; j++)
{
int X=0,Y=0;
memset(b,0,sizeof(b));
int a1=j/1000,a2=(j%1000)/100,a3=(j%100)/10,a4=j%10;
int sum=0;
for(i=0; i<n; i++)
{
b[a1]++;
b[a2]++;
b[a3]++;
b[a4]++;
X=0,Y=0;
if(b[(a[i][0]-'0')])
X++,b[(a[i][0]-'0')]--;
if(b[(a[i][1]-'0')])
X++,b[(a[i][1]-'0')]--;
if(b[(a[i][2]-'0')])
X++,b[(a[i][2]-'0')]--;
if(b[(a[i][3]-'0')])
X++,b[(a[i][3]-'0')]--;
memset(b,0,sizeof(b));
if(a1==a[i][0]-'0')
Y++;
if(a2==a[i][1]-'0')
Y++;
if(a3==a[i][2]-'0')
Y++;
if(a4==a[i][3]-'0')
Y++;
if(X==x[i]&&Y==y[i])
sum++;
}
if(sum==n)
{
f=j;
e++;
}
if(e>1)
break;
}
if(e>1)
printf("Not sure\n");
else
printf("%d\n",f);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ACM