您的位置:首页 > 其它

HDU 1172 猜数字

2015-08-21 17:27 253 查看
题目地址:点击打开链接

思路:简单枚举,每次输入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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: