[暴力]uva-725-Division

发布于 2019-07-30  1104 次阅读


https://vjudge.net/problem/UVA-725

暴力入门经典题
题意:两个整数(等于5位)相除等于 给定的n
输出所有可能 要求这两个整数每位各不相同(0123456789全有)
这个题用暴力枚举做 做法通过优雅的暴力
a/b=n -> a=b*n
我们枚举a b a从1234开始枚举 而b*n最大就是98765

#include<algorithm>
#include<iostream>
#include<vector>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<string>
#include<ctime>
#include<map>
#include<stack>
#include<set>
#include<cstring>
#include<sstream>
#include<queue>

using namespace std;
typedef long long ll;
typedef pair<int, int> pi;
const int maxn = 1e3 + 5;

int a, b, n, vis[10];

inline bool check(int m) {
	for (int i = 0; i < 5; i++) {
		if (vis[m % 10]) return 0;
		else vis[m % 10]++, m /= 10;
	}
}

int main() {
	int st = 0;
	while (~scanf("%d", &n) && n) {
		if (st) putchar('\n');
		else st = 1;
		int ok = 0;
		for (b = 1234; (a = n * b) < 98765; b++) {
			memset(vis, 0, sizeof(vis));
			if (check(a) && check(b)) printf("%05d / %05d = %d\n", a, b, n), ok = 1;
		}
		if (!ok) printf("There are no solutions for %d.\n", n);
	}
	return 0;
}

愿风指引你的道路,愿你的刀刃永远锋利。