UVA 725 Division
タイトルリンク
問題を解く構想.
直接五重サイクルで列挙し、除数を算出し、除数*商が五桁であるかどうかを確認し、配列aを空にして判別し、列挙変数の第一位が0であるかどうかを確認する.接頭辞0であればマークaに0が現れたことがあり、関数を用いて0-9が現れたかどうかを順次求め、束を結んだ後に配列を遍歴し、すべて現れた場合は特殊なフォーマットで出力する.
問題解決コード
問題を解く構想.
直接五重サイクルで列挙し、除数を算出し、除数*商が五桁であるかどうかを確認し、配列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;
}