hdu(1172)猜数字

暴力解决::
 
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int a[4],b[4],c[4],d[4];
int e[106],f[106],g[106];
int m;
int fun(int k)
{

int i,j,r,f1,f2;
a[0]=k%10;
a[1]=(k%100)/10;
a[2]=(k/100)%10;
a[3]=k/1000;
for(i=0;i<m;i++)
{
   memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
d[0]=e[i]%10;
d[1]=(e[i]%100)/10;
d[2]=(e[i]/100)%10;
d[3]=e[i]/1000;
f1=f2=0;
for(j=0;j<4;j++)
for(r=0;r<4;r++)
{
if(d[j]==a[r]&&j==r)
f1++;
if(d[j]==a[r]&&b[j]==0&&c[r]==0)-----是为了保证没有重复数字。。
{
f2++;
b[j]=1;
c[r]=1;
}
}
if(f1!=g[i]||f2!=f[i])
break;
}
if(i==m)
return 1;
return 0;
}
int main()
{
int i,k,h;
while(scanf("%d",&m),m)
{
for(i=0;i<m;i++)
scanf("%d%d%d",&e[i],&f[i],&g[i]);
k=0;
for(i=1000;i<=9999;i++)
{
if(fun(i)==1)
{
h=i;
k++;
}
if(k>1)
break;
}
if(k==1)
printf("%d\n",h);
else
printf("Not sure\n");
}
return 0;
}
应为是四位数,所以范围只可能是1000-9999之间,不是很大,所以可以用暴力枚举;
如果没有一个数满足所有条件,或者是有两个或两个以上的数满足,则Not sure;
反之输出那个数;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值