UVA 725 Division(除法)

输入正整数n,按从小到大的顺序输出所有形如abcde/fghij=n的表达式,其中a~j恰好为数字0~9的一个排列,2\leqslantn\leqslant79。

题解:暴力破解枚举fghij。

#include<iostream>
#include <string>
#include <string.h>
#include<vector>
#include<stack>
#include<queue>
#include<stdio.h>
#include<stdlib.h>
#include<iomanip>
using namespace std;
const int maxn = 50000;
int main()
{
int kase=0;
	int a[5], b[5];
	int x = 0; while (cin >> x && x) {
                 if(kase)cout<<endl;
                 kase++;
		int c = 99999 / x; bool iscout = false;
		for (int i = 1234; i <= c; i++) {
			int k = i;
			for (int z = 0; z < 5; z++) {
				a[z] = k % 10; k /= 10;
			}
			bool isequal = false;
			for (int z = 0; z < 5; z++) {
				for (int j = z + 1; j < 5; j++) {
					if (a[z] == a[j]) {
						isequal = true; break;
					}
				}
			}
			if (isequal)continue;
			int to = i * x;
			if (to >= 100000)break;
			int tx = to;
			for (int z = 0; z < 5; z++) {
				b[z] = tx % 10; tx /= 10;
			}
			isequal = false;
			for (int z = 0; z < 5; z++) {
				for (int j = z + 1; j < 5; j++) {
					for (int r = 0; r < 5; r++)if (b[z] == a[r] || b[j] == a[r]) {
						isequal = true; break;
					}
					if (b[z] == b[j]) {
						isequal = true; break;
					}
				}
			}
			if (isequal)continue;
			/*cout << to << " / " << right << setw(5) << setfill('0') << i << " = " << x << endl;*/
			printf("%05d / %05d = %d\n", to, i, x);
			iscout = true;
		}
		if (!iscout)printf("There are no solutions for %d.\n", x);
	}

	//system("pause");
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_36973725/article/details/83781959