HDU 3419 水搜索

68 篇文章 0 订阅

注意几个特殊条件

然后爆搜 水


#include "stdio.h"
#include "string.h"
#include "math.h"
#include "stdlib.h"
int judge(int w)
{
	int x;
	int num[11];
	memset(num,0,sizeof(num));

	while (w!=0)
	{
		x=w%10;
		if (x==0) return 1;
		if (num[x]==1) return 1;
		else 
			num[x]=1;

		w/=10;
	}
	return 0;
}

int judgee(int a,int b,int w)
{
	int num[11],x,c;
	memset(num,0,sizeof(num));

	c=a*b;
	x=log10(c)+1;
	if (x!=w) return 1;


	while (a!=0)
	{
		if (num[a%10]==1) return 1;
		else num[a%10]=1;
		a/=10;
	}

	while (b!=0)
	{
		if (num[b%10]==1) return 1;
		else num[b%10]=1;
		b/=10;
	}

	
	while (c!=0)
	{
		if (c%10==0) return 1;
		if (num[c%10]==1) return 1;
		else num[c%10]=1;
		c/=10;
	}

	return 0;


}

int main()
{
	int a,b,aa,bb,j,c,sum,i,ans;
	int hash[10010];
	memset(hash,0,sizeof(hash));



	for (i=10;i<=9999;i++)
		if (judge(i)==1) hash[i]=1;

	while (scanf("%d%d%d",&a,&b,&c)!=EOF)
	{
		if (a+b+c==0) break;

		if (a+b>c+1)
		{
			printf("0\n");
			continue;
		}

		if (a>c || b>c)
		{
			printf("0\n");
			continue;
		}
	

		if (a==0 || b==0 || c==0) 
		{
			printf("0\n");
			continue;
		}

		if (a+b<c)
		{
			printf("0\n");
			continue;
		}

		aa=1;
		for (i=1;i<a;i++)
			aa*=10;
		bb=1;
		for (i=1;i<b;i++)
			bb*=10;

		ans=0;

		for (i=aa;i<aa*10;i++)
			if (hash[i]==0)
			for (j=bb;j<bb*10;j++)
				if (hash[j]==0)
				{
					if (    judgee(i,j,c)==1) continue;
				//	printf("%d %d %d\n",i,j,i*j);
					ans++;
				}

	  
		printf("%d\n",ans);
	}


	return 0;
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值