Prime Cryptarithm

  最多就9个数,直接一层一层枚举就行。注意判断出现的数的每一位都要出现在集合中。

/*
ID: like_091
PROG: crypt1
LANG: C++
*/
#include<iostream>
#include<fstream>
using namespace std;
//判断tem中的每一位都在含有n个元素的集合x中
bool fun(int tem, int x[], int n)
{
	while (tem > 0)
	{
		bool r = true;
		for (int i = 0; i < n; i++)
			if (x[i] == (tem % 10))
			{
				r = false;
				break;
			}
		if (r)return false;
		tem /= 10;
	}
	return true;
}
int main()
{
	ifstream cin("crypt1.in");
	ofstream cout("crypt1.out");
	int n, d[10], sum = 0;
	cin>>n;
	for (int i = 0; i < n; i++)
		cin>>d[i];
	for (int i = 0; i < n; i++)
		for (int j = 0; j < n; j++)
			for (int k = 0; k < n; k++)
				for (int l = 0; l < n; l++)
					for (int m = 0; m < n; m++)
					{
						int a = d[i] * 100 + d[j] * 10 + d[k];
						int b = d[l] * 10 + d[m];
						//如果a和b中的每一位都在集合中
						if (fun(a, d, n) && fun(b, d, n))
						{
							//如果a乘以b中的每一位都在集合中且是三位数
							if (a * d[m] < 1000 && fun(a * d[m], d, n) && a * d[l] < 1000 && fun(a * d[l], d, n))
							{
								//a*b是四位数且每一位数都在集合中
								if (a * b < 10000 && fun(a * b, d, n))
										sum++;
							}
						}
					}
	cout<<sum<<endl;
	return 0;
}
posted @ 2011-02-21 11:03  like@neu  阅读(217)  评论(0编辑  收藏  举报