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]。