第7章暴力求解法例7-1除法(Division,UVa 725)
1707 ワード
UVa 725, Division
分析:
abcde/fghij = n;
小さいものから大きいもの、または大きいものから小さいものまでfghij(12345-98765)を列挙し、fghij*nでabcdeを算出し、abcdeが基準に合致するか否かを判断し、最後に表記に合致する式を出力する.
コードは次のとおりです.
分析:
abcde/fghij = n;
小さいものから大きいもの、または大きいものから小さいものまでfghij(12345-98765)を列挙し、fghij*nでabcdeを算出し、abcdeが基準に合致するか否かを判断し、最後に表記に合致する式を出力する.
コードは次のとおりです.
#include
int main()
{
long int n;
long int a, b, c;
int B[5];
int A[5];
b = 1234;
int i, j, k, space = 0;
while(scanf("%d", &n) != EOF && n)
{
int same, flag = 0;
if(space !=0)
printf("
");
for(i = b; i <= 98765; i++)
{
same = 1;
a = i * n;
B[0] = i % 10;
B[1] = (i % 100 - i % 10) / 10;
B[2] = (i % 1000 - i % 100) / 100;
B[3] = (i % 10000 - i % 1000) / 1000;
B[4] = i / 10000;
A[0] = a % 10;
A[1] = (a % 100 - a % 10) / 10;
A[2] = (a % 1000 - a % 100) / 100;
A[3] = (a % 10000 - a % 1000) / 1000;
A[4] = a / 10000;
for(j = 0; j < 5; j++)
{
for(k = j + 1; k < 5; k++)
{
if(B[j] - B[k] == 0)
{
same = 0;
break;
}
}
if(same == 0)
break;
}
for(j = 0; j < 5; j++)
{
for(k = j + 1; k < 5; k++)
{
if(A[j] - A[k] == 0)
{
same = 0;
break;
}
}
if(same == 0)
break;
}
for(j = 0; j < 5; j++)
{
for(k = 0; k < 5; k++)
{
if(A[j] - B[k] == 0)
{
same = 0;
break;
}
}
if(same == 0)
break;
}
if(same == 1)
{
if(a > 1234 && a < 98765)
{
printf("%ld / %05ld = %ld
", a, i, n);
flag = 1;
space++;
}
}
}
if(same == 0 && flag == 0)
{
printf("There are no solutions for %d.
", n);
space++;
}
}
return 0;
}