2019 蓝桥杯省赛 B 组模拟赛(四) 程序设计:除法表达式

题目:
2019 蓝桥杯省赛 B 组模拟赛(四) 程序设计:除法表达式
2019 蓝桥杯省赛 B 组模拟赛(四) 程序设计:除法表达式
代码如下:

#include<bits/stdc++.h>
using namespace std;
bool judge(int x,int y)
{
	int b[10] = {0};
	for(int i = 0;i < 5;i++){
		b[x % 10]++;
		x /= 10;
	}
	for(int i = 0;i < 5;i++){
		b[y % 10]++;
		y /= 10;
	} 
	for(int i = 0;i < 10;i++)
		if(b[i] != 1) return false;
	return true;
}
int main()
{
	int T,n;
	cin >> T;
	while(T--){
		cin >> n;
		bool flag = false;
		for(int i = 1234;i * n <= 98765;i++){
			if(judge(i,i * n) && (i <= 9876)){
				cout << i * n << "/0" << i << "=" << n << endl;
				flag = true;
			}
			if(judge(i,i * n) && (i >= 10234)){
				cout << i * n << "/" << i << "=" << n << endl;
				flag = true;
			}
		}
		if(!flag) cout << "No expression!" << endl;
	}
	return 0;
}

这道题用暴力写必定是会超时的,我们知道n的值,要算出ABCDE和DEFGH,那我们不妨先列举DEFGH的所有可能的值然后计算出ABCDE的值,如果这两个数所有位上的数都各不相同,那就输出。这里列举分为2种情况,第一种时DEFGH种包含0的,那么它的范围应该[01234,09876]。还有第二种就是不包含0这位数字的,那么范围应该在[10234,98765]。