第7章暴力求解法例7-1除法(Division,UVa 725)


UVa 725, Division
分析:
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; }