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;
}