UVA 725 Division

题目链接

解题思路

直接五重循环进行枚举,然后计算出除数,查看除数*商是否是五位数,再清空判别数组a,再查看枚举变量第一位是否为0如果是前缀0则标记a中0出现过,使用函数依次求余记录0-9是否出现过,结束后遍历一遍数组,如果全都出现过则按特殊格式输出。

题解代码

#include
#include
#include
using namespace std;
int a[10];
void Sum(int x,int y)//判断两个数所有位数,记录于a中(出现为1)
{
     
	while (x>=1)
	{
     
		a[x%10]=1;
		x /= 10;
	}
	while (y >= 1)
	{
     
		a[y % 10] = 1;
		y /= 10;
	}
}
int main()
{
     
	int t;
	while (cin >> t) {
     
		if (t == 0)break;
		bool g = 0;
		for (int i = 0; i < 9; i++)
		{
     
			for (int j = 0; j < 9; j++)
			{
     
				for (int k = 0; k < 9; k++)
				{
     
					for (int l = 0; l < 9; l++)
					{
     
						for (int x = 0; x < 9; x++)
						{
     
							int B = pow(10, 0) * x + pow(10, 1) * l + pow(10, 2) * k + pow(10, 3) * j + pow(10, 4) * i;//计算除数
							memset(a, 0, sizeof(a));//初始化判别数组
							Sum(B, B * t);//存储数字组成信息
							if (i == 0)a[0] = 1;//特别的存储前缀0
							bool p = 1;
							for (int s = 0; s < 10; s++)
							{
     
								if (a[s] == 0) {
     //如果不是0-9组合而成的两个数
									p = 0;//则直接下一次循环
									break;
								}
							}
							if (!p||(B*t>=100000))continue;//被除数也要是五位数才行
							g = 1;//标准对于商t找到过一组解
							cout << B * t << " / ";
							if (i == 0)cout << 0;//前缀0特别的输出
							cout << B << " = " << t<<endl;
						}
					}
				}
			}
		}
		if (g == 0)cout << "There are no solutions for " << t << "." << endl;//如果一组解没有的化
	}
	return 0;
}

你可能感兴趣的:(暴力搜索,枚举类,c++,算法)